我正在尝试使用python创建一个真正与Excel兼容的csv文件(我正在使用Excel2007,如果这有什么不同的话)。
下面是我想要做的事情
import csv
data = [ ['9-1', '9-2', '9-3'] ]
fd = open('test.csv', 'wb')
try:
writer = csv.writer(fd, dialect='excel', quotechar='"', quoting=csv.QUOTE_ALL)
writer.writerows(data)
finally:
fd.close()
这将创建一个包含以下内容的csv文件:
"9-1","9-2","9-3"
当我将它加载到Excel中时,我得到以下列:
09-Jan 09-Feb 09-Mar
Grrr谢谢Excel说真的,引用的意义是什么?
现在,我有了read elsewhere,为了让Excel将字符串作为文字处理,它们必须以等号="Like This"
作为前缀。所以我真正想做的是:
="9-1",="9-2",="9-3"
有没有办法用python中的csv
模块做到这一点?我猜它会涉及到创建一个custom dialect,但是我看不到任何变量可以给我想要的结果。
发布于 2011-11-15 01:40:41
好的,谢谢你的帮助,我已经想出了一个粗略的解决方案,所以我想在这里分享一下。
这不是最漂亮的解决方案,但它可以满足我的目的。一个警告:如果你的字符串中有任何引号,它就会中断!
import csv
import re
data = [ ['9-1', '9-2', '9-3'] ]
def quoteCsvData(data):
for x, row in enumerate(data):
for y, item in enumerate(row):
if data[x][y] != '':
data[x][y] = r'="' + data[x][y] + r'"'
return data
def unquoteCsvData(data):
for x, row in enumerate(data):
for y, item in enumerate(row):
if data[x][y] != '':
m = re.match(r'="([^"]*)"',data[x][y])
if m:
data[x][y] = m.group(1)
return data
fd = open('test2.csv', 'wb')
data = quoteCsvData(data)
try:
writer = csv.writer(fd, delimiter=',',
quotechar='|',
quoting=csv.QUOTE_NONE,
escapechar='\\')
writer.writerows(data)
finally:
fd.close()
fd = open('test2.csv', 'rb')
try:
reader = csv.reader(fd, delimiter=',',
quotechar='|',
quoting=csv.QUOTE_NONE,
escapechar='\\')
data = []
for row in reader:
data.append(row)
finally:
fd.close()
data = unquoteCsvData(data)
print data
更新:删除包含大量=""
的空单元格的垃圾邮件
发布于 2011-11-15 00:52:18
FWIW,Excel2007本身甚至不兼容。如果您在一个空的电子表格中键入9-1,它会在您离开单元格时立即将其转换为1-Sep。如果将单元格格式从常规更改为文本,则可以原样输入字符串文字并将其另存为.csv文件,但是当您将同一文件读取到空白电子表格(具有常规格式)中时,它将重新转换为日期。
Excel将文件另存为
9-1,9-2,9-3
没有引号和"=“符号。即使在读取csv文件之前将单元格格式设置为文本对我也不起作用-它以日期(显示值1-9月,单元格值9/1/2011)的形式导入自定义格式的3个单元格;其余的单元格转换为常规格式。
编辑:包含以下内容的csv文件:
"9-1",'9-2',='9-3',=''9-4''
读取到电子表格中的内容如下:
1-Sep '9-2' ='9-3' ="9-4"
所以=
没有做任何好的事情,但至少单引号将得到一个字符串文字,并保留引号。在Excel中有更多知识的人必须帮助去掉引号;“粘贴值”不会去掉它们。
发布于 2016-05-28 06:37:48
如果您的目标只是在Excel上以表格的形式编写一个列表。您可以尝试下面的示例,其中";“和dialect='excel-tab‘属性使我们能够在列之间切换。
import csv
RESULTS = [
['val_col1;','val_col2;','val_col3']
]
resultFile = open("testExcel.csv",'wb')
resultWriter= csv.writer(resultFile, dialect='excel-tab')
resultWriter.writerows(RESULTS)
https://stackoverflow.com/questions/8124606
复制相似问题