[英]Appending a row of data to line 2 in a large CSV File
我确信这是一个非常简单的问题,但我似乎找不到任何相关信息。
我有一个非常大的 CSV 文件,我需要在标题后直接插入一行,这有助于另一个读取 csv 并将其连接到包裹 shapefile 的代码。
我有代码来附加我想要的数据行,但它只会转到最后一行。 我不知道如何让代码在标题行之后立即插入我的行。 这是我的代码:
import os
import csv
insert_row = '"AAAAAAAAAAAAAAAAAAA","**********","**********","**********","**********","**********","**********","**","**********","**********","****","**********",999999,9999,00'
os.chdir(r"D:\PROPERTY\PINELLAS\Data_20201001_t")
with open("owner_mail.csv", 'r') as csv_file, open("owner_mail.csv", 'a', newline = "") as new_file:
csv_reader = csv.reader(csv_file)
csv_writer = csv.writer(new_file)
csv_writer.writerow(insert_row)
就是这样了。 我只需要 insert_row 数据行位于第 2 行位置而不是文件末尾。 谢谢你。
除非替换长度完全相同的数据,否则您不能只在文件中间插入一行。 您必须阅读整个文件,对其进行编辑并重新编写。
这样的事情应该工作:
import csv
# This must be an iterable not a string
insert_row = "AAAAAAAAAAAAAAAAAAA","**********","**********","**********","**********","**********","**********","**","**********","**********","****","**********",999999,9999,00
with open("owner_mail.csv", 'r') as csv_file, open("owner_mail_updated.csv", 'w', newline = "") as new_file:
csv_reader = csv.reader(csv_file)
csv_writer = csv.writer(new_file)
header = next(csv_reader)
csv_writer.writerow(header)
csv_writer.writerow(insert_row)
for line in csv_reader:
csv_writer.writerow(line)
如果 CSV 文件不是太大而无法完全容纳在内存中,那么您可以一次读取所有行,编辑它们,然后将它们写回到同一个文件中。 如果出现问题,风险更大。 写入新文件更安全,如果没有错误,则删除原始文件并重命名:
import csv
# This must be an iterable not a string
insert_row = "AAAAAAAAAAAAAAAAAAA","**********","**********","**********","**********","**********","**********","**","**********","**********","****","**********",999999,9999,00
with open("owner_mail.csv", 'r') as csv_file:
rows = list(csv.reader(csv_file))
rows.insert(1,insert_row) # insert after header row
with open("owner_mail.csv", 'w') as csv_file:
w = csv.writer(csv_file)
w.writerows(rows)
请试试这个:
import os
import csv
insert_row = '"AAAAAAAAAAAAAAAAAA","**********","**********","**********","**********","**********","**********","**","**********","**********","****","**********",999999,9999,00'
with open("owner_mail.csv", 'r') as csv_file, open("owner_mail.csv", 'w') as new_file:
csv_reader = csv.reader(csv_file)
reader = list(csv_reader)
reader.insert(1,insert_row)
csv_writer = csv.writer(new_file)
csv_writer.writerows(reader)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.