在Python中从CSV复制标头无法正常工作-分隔符问题

时间:2019-01-03 22:16:08

标签: python python-3.x

我正在尝试将标头从一个Python文件复制到另一个文件,并将标头拆分为单个字符,一个字符用于一列。我不确定为什么。

我已经阅读了StackOverflow,但是找不到针对此问题的问题/解决方案。

first.csv文件数据

Date,Data
1/2/2019,a
12/1/2018,b
11/3/2018,c

Python代码

import csv
from datetime import datetime, timedelta

date_ = datetime.strftime(datetime.now(),'%Y_%m_%d')

with open('first.csv', 'r') as full_file, open('second.csv' + '_' + date_ + '.csv', 'w') as past_10_days:
writer = csv.writer(past_10_days)
writer.writerow(next(full_file)) #copy headers over from original file
for row in csv.reader(full_file): #run through remaining rows
    if datetime.strptime(row[0],'%m/%d/%Y') > datetime.now() - timedelta(days=10):  #write rows where timestamp is greater than today - 10
        writer.writerow(row)  

我得到的结果:

D,a,t,e,D,a,t,a

1/2/2019,a 

我希望结果只是

Date,Data
1/2/2019,a

我只是错过了设置选项吗?这是Python 3 +

谢谢!

1 个答案:

答案 0 :(得分:1)

更改

writer.writerow(next(full_file))

收件人

writer.writerow(next(csv.reader(full_file)))

您的代码将full_file作为文本文件而不是CSV进行读取,因此您只需获取字符即可。

理想地,正如roganjosh指出的那样,您只需定义一次阅读器,因此代码应如下所示:

reader = csv.reader(full_file)
writer.writerow(next(reader))
for row in reader:
    if datetime.strptime(row[0],'%m/%d/%Y') > datetime.now() - timedelta(days=10):  
        writer.writerow(row)