请参阅以下问题代码 -
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格式的另一个文件,我该怎么做?我尝试了一些东西,但有点搞砸了代码。
有人可以帮忙吗?
答案 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()
对相同。