大家好我如何使用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
答案 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)