如何使用list.remove或del通过使用切片从CSV中删除CSV中的行?

时间:2017-11-28 20:12:24

标签: python csv

大家好我如何使用list.remove或del删除我曾经迭代过列表的切片?我尝试了多种组合,并且因为迭代不是列表或因为我必须提供整数而不断出错。

import csv
import sys
from itertools import islice

sourcef = sys.argv[1]  
destf = sys.argv[2]  
linestart = int(sys.argv[3])   
lineend = int(sys.argv[4])  

with open (sourcef, 'rb') as file1, open (destf, 'wb') as file2:
    reader = csv.reader(file1)
    writer = csv.writer(file2)
    row = list(reader)
    for i in [slice(reader, linestart, lineend)]:
    #for i in islice(reader, linestart, lineend): 
        row.remove(i)
        print row

1 个答案:

答案 0 :(得分:2)

这与csv几乎没有关系。可以使用切片分配修改任何list以删除相邻元素。

>>> row = [1,2,3,4,5,6]
>>> row[slice(2,4)] = []
>>> row
[1, 2, 5, 6]

请注意,我已使用slice但在这种情况下

>>> row[2:4] = []

是一样的。 slice对象的主要兴趣在于您可以将其作为参数/用作变量传递。

在你的情况下

row[linestart:lineend] = []

诀窍

在您的情况下,如果csv文件非常大,则完全加载它可能是一个问题。您可以使用enumerate来过滤行:

reader = csv.reader(file1)
writer = csv.writer(file2)
for i,row in enumerate(reader):
    if linestart <= i < lineend:
       continue  # skip this range
    writer.writerow(row)