python - 在 csv 文件的特定列中插入数据

标签 python csv

我正在尝试插入从日期列获得的数据。 csv 文件中的列标题为 date,day,month,year,pcp1,pcp2,pcp3,pcp4,pcp5,pcp6日、月、年列当前为空。

我想将通过分割方法从日期获得的数据插入到这些列中。我怎样才能做到这一点?

以下是 csv 文件中的示例数据:

date    day month   year    pcp1    pcp2    pcp3    pcp4    pcp5    pcp6
1.01.1979               0.431   2.167   9.375   0.431   2.167   9.375
2.01.1979               1.216   2.583   9.162   1.216   2.583   9.162
3.01.1979               4.041   9.373   23.169  4.041   9.373   23.169
4.01.1979               1.799   3.866   8.286   1.799   3.866   8.286
5.01.1979               0.003   0.051   0.342   0.003   0.051   0.342
6.01.1979               2.345   3.777   7.483   2.345   3.777   7.483
7.01.1979               0.017   0.031   0.173   0.017   0.031   0.173

这是我的代码:

import csv

dd=[]
mm=[]
yy=[]
with open('output2.csv') as csvfile:
            reader = csv.DictReader(csvfile, fieldnames=("date","day","month","year","pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"), delimiter=';', quotechar='|')
            next(reader)  # skip header row
            x = [row['date'] for row in reader]

for date_str in x:
    day, month, year = date_str.split('.')
    dd.append(day)
    mm.append(month)
    yy.append(year)

csvfile.close()

with open('output2.csv') as f:
    fieldnames = ["date","day","month","year","pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"]
    writer = csv.DictWriter(f, fieldnames=fieldnames,delimiter=';', quotechar='|')
    for i in range(len(dd)):
        writer.writerow({'day':dd[i]})
    for i in range(len(mm)):
        writer.writerow({'month':mm[i]})
    for i in range(len(yy)):
        writer.writerow({'year':yy[i]})


f.close()

最佳答案

您可以按如下方式解析 CSV。这会将所有行读取到列表中,然后将日期部分插入到空列中。

import csv

with open('output2.csv', newline='') as f_input:
    csv_input = csv.reader(f_input, delimiter=';', quotechar='|')
    header = next(csv_input)
    rows = list(csv_input)

with open('output2b.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output, delimiter=';', quotechar='|')
    csv_output.writerow(header)

    for row in rows:
        day, month, year = row[0].split('.')
        row[1:4] = [day, month, year]
        csv_output.writerow(row)

为您提供以下输出:

date;day;month;year;pcp1;pcp2;pcp3;pcp4;pcp5;pcp6
1.01.1979;1;01;1979;0.431;2.167;9.375;0.431;2.167;9.375
2.01.1979;2;01;1979;1.216;2.583;9.162;1.216;2.583;9.162
3.01.1979;3;01;1979;4.041;9.373;23.169;4.041;9.373;23.169
4.01.1979;4;01;1979;1.799;3.866;8.286;1.799;3.866;8.286
5.01.1979;5;01;1979;0.003;0.051;0.342;0.003;0.051;0.342
6.01.1979;6;01;1979;2.345;3.777;7.483;2.345;3.777;7.483
7.01.1979;7;01;1979;0.017;0.031;0.173;0.017;0.031;0.173

使用 Python 3.5.2 进行测试

关于python - 在 csv 文件的特定列中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329274/

相关文章:

python - 字典中的组合键

csv - 经典的 asp - 读取包含字母数字数据的 csv 文件

javascript - jquery-select2 将值作为 CSV 字符串发送到服务器

python - 如何在Python中对列表中的词频进行排序(但不是全部打印出来)

jquery - 是否可以将对象从 jquery 发布到 bottle.py?

python - 如何将两个列表合并为一个包含两列的列表

python - 在写入 CSV 文件时从中读取

python - 如何将结果保存到文件中?

python - 加快 Pandas 中 csv 文件的条件行读取速度?

python - 获取最大化 matplotlib 图形的大小