有关如何使用python csv模块将数据正确写回CSV文件的快速提问。目前我正在导入文件,提取日期列并使用datetime模块创建days_of_the_week列。然后我想写出一个包含一个原始元素和新元素的新csv文件(或覆盖单个文件)。
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
如果我将out_file.write中的分隔符更改为逗号,我只需每列获取一个数据元素,如下所示:
Friday 15:23 Friday 14:41 Friday 13:54 ....
任何想法都将不胜感激。谢谢!
答案 0 :(得分:1)
我不清楚你想要什么样的格式,我假设你只想在wkday
和time
之间留出一个空格。要快速解决问题,请不要单独附加wkday
和time
,如您的示例所示,将它们附加在一起:
...
incoming.append('{} {}'.format(wkday,time))
...
或,将您的incoming
建立为列表列表:
...
incoming.append([wkday,time])
...
并将您的写入更改为:
with open('new_dates2.csv', 'w') as out_file:
out_file.write('\n'.join([' '.join(t) for t in incoming]))
答案 1 :(得分:0)
您希望第0列中的xpath=//*[@id="evidenceListPanel"]//*[@name="rememberMe"]
和第1列中的时间,因此您需要将Friday
更改为列表列表。这意味着append语句应如下所示:
incoming
然后,最好使用...
incoming.append([wkday, time])
...
写回文件。您可以一次编写整个csv.writer
而无需担心格式化。
incoming
答案 2 :(得分:0)
你真的不需要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
答案 3 :(得分:0)
基本上你的传入数组是一个线性列表。所以,你应该做的就像是:
#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')