【问题标题】:Appending a row of data to line 2 in a large CSV File将一行数据附加到大型 CSV 文件的第 2 行
【发布时间】:2021-01-14 05:06:35
【问题描述】:

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

我有一个非常大的 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 行位置而不是文件末尾。谢谢。

【问题讨论】:

    标签: python csv append


    【解决方案1】:

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

    这样的事情应该可以工作:

    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)
    

    【讨论】:

    • 非常感谢您的工作!我还必须重新格式化我的 insert_row 变量。我将其更改为括号中的列表,而不是用单引号捕获整行。
    • @ParkerJohnson 是的,我没有注意到,但更新了答案。
    【解决方案2】:

    请试试这个:

    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)
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多