如何将CSV解析数据保存到另一个csv文件?

时间:2013-11-19 10:52:04

标签: python file csv

请参阅以下问题代码 -

import csv

MY_FILE = "../data/sample_sfpd_incident_all.csv"

def parse(raw_file, delimiter):
    opened_file = open(raw_file)
    csv_data = csv.reader(opened_file, delimiter=delimiter)

    parsed_data = []
    fields = csv_data.next()
    for row in csv_data:
        parsed_data.append(dict(zip(fields, row)))
    opened_file.close()
    return parsed_data

def main():
    new_data = parse(MY_FILE, ",")
    print new_data

if __name__ == "__main__":
    main()

问题是,如果我想将解析后的数据保存为csv格式的另一个文件,我该怎么做?我尝试了一些东西,但有点搞砸了代码。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以使用csv.writer()将数据行写入另一个CSV文件,或使用csv.DictWriter()编写包含行数据的词典。后者确实需要您预先指定字段名。

在阅读时,最好直接复制CSV行:

with open(inputfilename, 'rb') as ifh, open(outputfilename, 'wb') as ofh:
    reader = csv.reader(ifh)
    writer = csv.reader(ifh)

    writer.writerows(reader)

这里writer.writerows()采用可迭代的行; reader对象碰巧是可迭代的,因此直接复制数据。您可以在csv.reader()csv.writer()构造函数中添加其他方言参数来更改格式;假设您使用delimiter='\t'阅读(标签分隔)并写出默认的逗号分隔格式。

如果要处理其间的每一行,请使用循环:

for row in reader:
    # do something with row
    writer.writerow(row)

writer.writerow()(单数)方法一次写一行。

要跨字典行复制,您需要指定字段。使用csv.DictReader()对象生成字典,它将为您处理第一个CSV行的字段名:

with open(inputfilename, 'rb') as ifh, open(outputfilename, 'wb') as ofh:
    reader = csv.DictReader(ifh)
    writer = csv.DictWriter(ifh, fieldnames=reader.fieldnames)

    writer.writerows(reader)

此处,fieldnames参数直接取自csv.DictReader().fieldnames属性。同样,根据需要处理循环中的行,与常规csv.reader() / csv.writer()对相同。