如何从csv文件中提取行到其他csv文件?

时间:2017-10-22 10:23:42

标签: python csv

参考这个问题:如何从csv文件中提取和复制行到python中的另一个csv文件?基于此数组执行此代码后的结果:

# read
data = []
with open('test.csv', 'r') as f:
    f_csv = csv.reader(f)
    # header = next(f_csv)
    for row in f_csv:
        data.append(row)

# write
with open('newtest.csv', 'w+') as f:
    writer = csv.writer(f)
    for i in range(int(len(data) * 30 / 100)):
        writer.writerow(data[i])

这是代码:

 frame.number    frame.len   frame.cap_len   frame.Type 
     empty line....
      1               100           100           ICMP_tt 
   empty line....
      2                64            64           UDP 

这是newtest.csv文件中的结果:

 frame.number    frame.len   frame.cap_len   frame.Type 
    1               100           100           ICMP_tt 
    2                64            64           UDP 

但是,我希望结果如下:

  frame.number    frame.len   frame.cap_len   frame.Type  
      3               100           100           ICMP_tt   
      4                87            64           ICMP_nn
      5               100           100           ICMP_tt   
      6                87            64           ICMP_nn
      7               100           100           ICMP_tt   
      8                87            64           ICMP_nn
      9                87            64           ICMP_nn

test.csv文件stil相同我的意思是复制的两行不会被删除。这意味着我想拥有:

{{1}}

我希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

要在Python 2.x中单独进行读写,可以使用以下方法:

import csv

with open('test.csv', 'rb') as f_input:
    data = list(csv.reader(f_input))

with open('newtest.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerows(data)

这意味着data将所有行保存为列表列表。确保以二进制模式打开文件以进行读写。如果不这样做,你会得到空行。

要一次执行此行(如果CSV文件对于内存来说太大,则非常有用),您可以执行以下操作:

with open('test.csv', 'rb') as f_input, open('newtest.csv', 'wb') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)    

    for row in csv_input:
        csv_output.writerow(row)

甚至:

with open('test.csv', 'rb') as f_input, open('newtest.csv', 'wb') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)    
    csv_output.writerows(csv_input)