python CSV编写器-格式
关于如何使用python CSV模块将数据正确写入CSV文件的快速问题。目前,我正在导入一个文件,拉取一列日期,并使用datetime模块生成一列days_of the_week。然后,我想写出一个新的csv文件(或对单个csv文件进行过度查看),其中包含一个原始元素和新元素python CSV编写器-格式,python,csv,Python,Csv,关于如何使用python CSV模块将数据正确写入CSV文件的快速问题。目前,我正在导入一个文件,拉取一列日期,并使用datetime模块生成一列days_of the_week。然后,我想写出一个新的csv文件(或对单个csv文件进行过度查看),其中包含一个原始元素和新元素 with open('new_dates.csv') as csvfile2: readCSV2 = csv.reader(csvfile2, delimiter=',') incoming = []
with open('new_dates.csv') as csvfile2:
readCSV2 = csv.reader(csvfile2, delimiter=',')
incoming = []
for row in readCSV2:
readin = row[0]
time = row[1]
year, month, day = (int(x) for x in readin.split('-'))
ans = datetime.date(year, month, day)
wkday = ans.strftime("%A")
incoming.append(wkday)
incoming.append(time)
with open('new_dates2.csv', 'w') as out_file:
out_file.write('\n'.join(incoming))
输入文件如下所示:
2017-03-02,09:25
2017-03-01,06:45
2017-02-28,23:49
2017-02-28,19:34
Friday
15:23
Friday
14:41
Friday
13:54
Friday
7:13
Friday,15:23
Friday,14:41
Friday,13:54
Friday,7:13
Friday 15:23 Friday 14:41 Friday 13:54 ....
...
incoming.append([wkday, time])
...
使用此代码时,我得到的输出文件如下所示:
2017-03-02,09:25
2017-03-01,06:45
2017-02-28,23:49
2017-02-28,19:34
Friday
15:23
Friday
14:41
Friday
13:54
Friday
7:13
Friday,15:23
Friday,14:41
Friday,13:54
Friday,7:13
Friday 15:23 Friday 14:41 Friday 13:54 ....
...
incoming.append([wkday, time])
...
我需要的是一个如下所示的输出文件:
2017-03-02,09:25
2017-03-01,06:45
2017-02-28,23:49
2017-02-28,19:34
Friday
15:23
Friday
14:41
Friday
13:54
Friday
7:13
Friday,15:23
Friday,14:41
Friday,13:54
Friday,7:13
Friday 15:23 Friday 14:41 Friday 13:54 ....
...
incoming.append([wkday, time])
...
如果我将out_file.write中的分隔符更改为逗号,则每列只获得一个数据元素,如下所示:
2017-03-02,09:25
2017-03-01,06:45
2017-02-28,23:49
2017-02-28,19:34
Friday
15:23
Friday
14:41
Friday
13:54
Friday
7:13
Friday,15:23
Friday,14:41
Friday,13:54
Friday,7:13
Friday 15:23 Friday 14:41 Friday 13:54 ....
...
incoming.append([wkday, time])
...
如有任何想法,将不胜感激。谢谢 由于不太清楚您想要什么格式,我假设您只需要
wkday
和time
之间的一个空格。要快速修复问题,请不要像您的示例中那样分别附加wkday
和time
,而是将它们附加在一起:
...
incoming.append('{} {}'.format(wkday,time))
...
或,将您的传入的
构建为列表列表:
...
incoming.append([wkday,time])
...
并将您的书写更改为:
with open('new_dates2.csv', 'w') as out_file:
out_file.write('\n'.join([' '.join(t) for t in incoming]))
似乎您希望在第0列中显示
Friday
,在第1列中显示时间,因此您需要将incoming
更改为列表列表。这意味着append语句应该如下所示:
2017-03-02,09:25
2017-03-01,06:45
2017-02-28,23:49
2017-02-28,19:34
Friday
15:23
Friday
14:41
Friday
13:54
Friday
7:13
Friday,15:23
Friday,14:41
Friday,13:54
Friday,7:13
Friday 15:23 Friday 14:41 Friday 13:54 ....
...
incoming.append([wkday, time])
...
然后,最好使用csv.writer
写回文件。您可以一次性编写整个传入的,而无需担心格式问题
with open('new_dates2.csv', 'w') as out_file:
writer = csv.writer(out_file)
writer.writerows(incoming)
为此,您实际上不需要csv
模块。我在猜测输入,但从描述来看:
2017-03-02,09:25
2017-03-01,06:45
2017-02-28,23:49
2017-02-28,19:34
这将解析它并以新格式写入:
import datetime
with open('new_dates.csv') as f1, open('new_dates2.csv','w') as f2:
for line in f1:
dt = datetime.datetime.strptime(line.strip(),'%Y-%m-%d,%H:%M')
f2.write(dt.strftime('%A,%H:%M\n'))
输出文件:
Thursday,09:25
Wednesday,06:45
Tuesday,23:49
Tuesday,19:34
基本上,传入数组是一个线性列表。所以,你应该做的事情如下:
#your incoming array
incoming = ['Friday', '15:23', 'Friday', '14:41', 'Friday', '13:54', 'Friday', '7:13']
#actual parsing of the array for correct output
for i,j in zip(incoming[::2], incoming[1::2]):
out_file.write(','.join((i,j)))
out_file.write('\n')
问题可能是此联接操作:“\n”。联接(传入)
。尝试用空格\n替换该空格以获得所需的输出;对于真正的csv,使用“,”将所有数据显示在一个长行中,而不是两个csv列中。如前所述,使用逗号会导致每一个值在一行的不同字段中。输入文件是什么样子的?打印工作日打印时间周四16:45周三20:42周一12:12周六07:08请编辑问题以显示创建输出的输入文件。使其可复制。使用该方法似乎可以产生与用空格替换\n相同的结果。所有数据都放在一个字段中。第二个选项会产生一些更奇怪的结果。所有数据都在一列中,每个字段都是一个字符。@Justin抱歉,遗漏了一个数据块输出-以上应立即工作回溯(最近一次调用):文件“/analyze.py”,第32行,输入输出文件。写入('\n.join('.join(incoming)))类型错误:序列项0:预期字符串,列表查找错误:回溯(最后一次调用):文件“/analyze.py”,第35行,in-out_File.write('\n'.join(传入))TypeError:序列项0:应为字符串,列表found@Justin检查当前的答案-我编辑了它。这是假设输入文件中没有其他内容。OP似乎也需要CSV输出。@Stuart自我写这篇文章以来,问题发生了变化,但添加逗号仍然是对strftime
的轻微修改。无需假设参与,因为OP也添加了输入。