如何使用Python将行从一个CSV复制到另一个CSV文件

时间:2017-03-15 11:01:24

标签: python csv

我正在尝试将行从一个CSV复制到另一个CSV,并且还要在从第一个文件复制后删除行。

请参阅代码,它仅用于将特定行从一个CSV文件复制到另一个CSV文件,但它不会从文件1中删除行。

import csv
import os

File1 = 'in.csv'
File2 = 'out.csv'

with open(File1, "r") as r, open(File2, "a") as w: 
     reader = csv.reader(r, lineterminator = "\n")
     writer = csv.writer(w, lineterminator = "\n")

     for counter,row in enumerate(reader):
         if counter<0: continue
         if counter>50:break
         writer.writerow(row)

with open(File1, "w") as r: 
     reader = csv.writer(r, lineterminator = "\n")

     for counter,row in enumerate(reader):
         if counter<0: continue
         if counter>50:break
         reader.writerow(row)

请让我知道在将行复制到文件2后如何工作,然后从文件1中删除这些行。

这是错误:

for counter,row in enumerate(reader):
TypeError: '_csv.writer' object is not iterable

1 个答案:

答案 0 :(得分:0)

您似乎试图从一个文件移动前50行并将它们附加到另一个文件。这需要通过几个步骤完成:

  1. in.csv读取50行中的每一行,并将每一行追加到out.csv

  2. in.csv中的剩余行写入临时文件。

  3. 删除原始in.csv文件,并将临时文件重命名为in.csv

  4. 例如:

    import itertools
    import os
    
    file_in = 'in.csv'
    file_out = 'out.csv'
    file_temp = '_temp.csv'
    
    with open(file_in, "rb") as f_input, open(file_out, "ab") as f_output, open(file_temp, "wb") as f_temp:
        csv_input = csv.reader(f_input)
    
        # Append first 50 rows to file_out
        csv.writer(f_output).writerows(itertools.islice(csv_input, 0, 50))
    
        # Write the remaining rows from file_in to file_temp
        csv.writer(f_temp).writerows(csv_input)
    
    # Rename f_temp to file_in, first remove existing file_in then rename temp file
    os.remove(file_in)
    os.rename(file_temp, file_in)