您的x已经是一个序列,不需要将其包装在列表中:for x in g:
writes.writerow(x)
您可以直接将生成器传递给writes.writerows():with open(f2, "w") as file1:
writes = csv.writer(file1, delimiter=' ', quoting=csv.QUOTE_ALL)
writes.writerows(mygen(reader))
演示:>>> import sys
>>> import csv
>>> def mygen(reader):
... for row in reader:
... yield row[0],row[1],row[2],row[3],row[4]
...
>>> reader = csv.reader('''\
... foo,bar,baz,spam,ham,eggs
... 42,81,13,97,73,100
... '''.splitlines())
>>> writes = csv.writer(sys.stdout, delimiter=' ', quoting=csv.QUOTE_ALL)
>>> writes.writerows(mygen(reader))
"foo" "bar" "baz" "spam" "ham"
"42" "81" "13" "97" "73"
你需要注意的是,你的reader并不是一个你已经筋疲力尽的生成器。如果它是一个csv.reader()对象,并且您以前读过所有行,则需要将底层文件对象重新卷绕回以fileobj.seek(0)开头的位置。不过,最好不要读两次文件。
如果reader对象生成序列(如列表或元组),则只需使用切片来获取前5个元素,无需键入每个索引:def mygen(reader):
for row in reader:
yield row[:5]