CSV写入器 - 尝试在每列中写入变量

1 投票
2 回答
10683 浏览
提问于 2025-04-17 19:52

我正在尝试把一些数据写入一个csv文件,但我无法选择不同的列。

car=["car 11"]
finish=["Landhaus , Nord"]
time=["['05:36']", "['06:06']", "['06:36']", "['07:06']", "['07:36']", "['08:06']", "['08:36']", "['09:06']", "['09:36']", "['10:06']", "['10:36']", "['11:06']", "['11:36']", "['12:06']", "['12:36']", "['13:06']", "['13:36']", "['14:06']", "['14:36']", "['15:06']", "['15:36']", "['16:06']", "['16:36']", "['17:06']", "['17:36']", "['18:06']", "['18:36']", "['19:06']", "['19:36']", "['20:06']", "['20:36']"]<br/>
myfile = open("Informationen.csv", "wb")
writer = csv.writer(myfile,dialect='excel',delimiter=' ')
bla =[car,finish,time]
writer.writerow(bla)

输出结果:

car 11 Landhaus , Nord "['05:36']", "['06:06']", [..]

所有数据都在一行,且都在第一列

但我想要的是这样的格式

car 11 (in row 1 Colum 1) | "Landhaus , Nord" (in row 1 Column 2) | ['05:36'] (in Line 1 Column 3 ) | ['06:06'] (in row 1 Column 4 ) till Column n

谢谢大家的帮助!

编辑
再举一个例子,应该是这样的格式
第一行:汽车 11(第一列)乡村别墅,北方(第二列)['05:36'](第三列)['05:36'](第四列)[...]
示例 http://img13.imageshack.us/img13/4964/unbenanntvilw.png

目前的解决方案:
但在时间列表方面仍然有问题

car=["car 11"]
trenn=[';']
finish=['Landhaus , Nord']
time=["['05:36']", "['06:06']", "['06:36']", "['07:06']", "['07:36']", "['08:06']", "['08:36']", "['09:06']", "['09:36']", "['10:06']", "['10:36']", "['11:06']", "['11:36']", "['12:06']", "['12:36']", "['13:06']", "['13:36']", "['14:06']", "['14:36']", "['15:06']", "['15:36']", "['16:06']", "['16:36']", "['17:06']", "['17:36']", "['18:06']", "['18:36']", "['19:06']", "['19:36']", "['20:06']", "['20:36']"]
myfile = open("Informationen2.csv", "wb")
writer = csv.writer(myfile,delimiter=' ')
bla = car + trenn + finish + trenn + time
writer.writerow(bla)
myfile.close()

2 个回答

1
import csv

car=["car 11"]
finish=['Landhaus , Nord']
time=["['05:36']", "['06:06']", "['06:36']", "['07:06']", "['07:36']", "['08:06']", "['08:36']", "['09:06']", "['09:36']", "['10:06']", "['10:36']", "['11:06']", "['11:36']", "['12:06']", "['12:36']", "['13:06']", "['13:36']", "['14:06']", "['14:36']", "['15:06']", "['15:36']", "['16:06']", "['16:36']", "['17:06']", "['17:36']", "['18:06']", "['18:36']", "['19:06']", "['19:36']", "['20:06']", "['20:36']"]
myfile = open("derp.csv", "wb")
writer = csv.writer(myfile)
bla = car + finish + time
writer.writerow(bla)
myfile.close()

这是我从Excel中得到的输出结果。

在这里输入图片描述

1


根据Python文档,对于csv.writer()这个函数...

“可以提供一个可选的dialect参数,用来定义特定CSV方言的一组参数。”

...并且...

“其他可选的fmtparams关键字参数可以用来覆盖当前方言中的单个格式参数。”

你遇到的问题是因为把time列表的字符串形式写入文件,并且使用空格作为分隔符。如果你把Informationen.csv当作普通文本文件来看,问题就会变得明显。

首先,使用csv.writer(myfile, dialect='excel', delimiter=' ')时,传入空格作为分隔符会覆盖Excel方言中定义的默认分隔符,导致列表bla的元素写入文件时的格式变成element1 element2 element3,而不是element1,element2,element3

其次,虽然time列表中的大部分元素在电子表格中被分配到了各自的列,但将列表作为字符串写入文件也导致了整体格式不如人意。

当你用脚本创建的文件在Excel中打开时,Excel会根据它找到的前两个逗号读取前两个值,这两个逗号恰好在字符串'Landhaus , Nord'的中间,以及time列表的字符串表示中。

要实现你需要的列分隔,首先要把time列表的元素添加到bla列表中,而不是把前者嵌套在后者里面。然后在csv.writer(myfile, dialect='excel', delimiter=' ')中去掉delimiter=' ',这样就能避免写入文件时覆盖分隔符的效果:

import csv

car = ['car 11']
finish = ['Landhaus , Nord']
time = ["['05:36']", "['06:06']", "['06:36']", "['07:06']", "['07:36']"]
try:
    with open('Informationen.csv', 'w') as myfile:
        writer = csv.writer(myfile, dialect='excel')
        bla = [car, finish]
        for each_time in time:
            bla.append(each_time)
        writer.writerow(bla)
except IOError as ioe:
    print('Error: ' + str(ioe))

这样在Excel中会产生以下输出:

http://imageshack.us/a/img839/8061/screenshotkn.png

撰写回答