Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python CSV编写器-格式_Python_Csv - Fatal编程技术网

python 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 = []

关于如何使用python CSV模块将数据正确写入CSV文件的快速问题。目前,我正在导入一个文件,拉取一列日期,并使用datetime模块生成一列days_of the_week。然后,我想写出一个新的csv文件(或对单个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 
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也添加了输入。