Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一行数据追加到大型CSV文件的第2行_Python_Csv_Append - Fatal编程技术网

Python 将一行数据追加到大型CSV文件的第2行

Python 将一行数据追加到大型CSV文件的第2行,python,csv,append,Python,Csv,Append,我相信这是一个非常简单的问题,但我似乎找不到任何关于它的信息 我有一个非常大的CSV文件,我需要在标题后面直接插入一行,这有助于另一个代码读取CSV并将其连接到地块形状文件 我有代码附加我想要的数据行,但它只会转到最后一行。我不知道如何让代码在标题行之后立即插入我的行。这是我的密码: import os import csv insert_row = '"AAAAAAAAAAAAAAAAAAA","**********","**********

我相信这是一个非常简单的问题,但我似乎找不到任何关于它的信息

我有一个非常大的CSV文件,我需要在标题后面直接插入一行,这有助于另一个代码读取CSV并将其连接到地块形状文件

我有代码附加我想要的数据行,但它只会转到最后一行。我不知道如何让代码在标题行之后立即插入我的行。这是我的密码:

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_行位于第2行位置,而不是文件的末尾。谢谢。

< P>不能只在文件中间插入一行,除非替换完全相同长度的数据。您必须读取整个文件,编辑它,然后重新写入它

像这样的方法应该会奏效:

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)



非常感谢你的工作!我还必须重新格式化insert_row变量。我将它改为括号中的列表,而不是用单引号将整行内容括起来。@ParkerJohnson是的,我没有注意到,但更新了答案。