python CSV编写器 - 格式化

时间:2017-04-26 15:18:58

标签: python csv

有关如何使用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  ....

任何想法都将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:1)

我不清楚你想要什么样的格式,我假设你只想在wkdaytime之间留出一个空格。要快速解决问题,请不要单独附加wkdaytime,如您的示例所示,将它们附加在一起:

...
    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')