6

我正在尝试读取 CSV 文件中的每一行并将其打印到一个新文件中。不幸的是,我得到了一个无法删除的空白行。

lines = open( 'old.csv', "r" ).readlines()[::2]
file = open('new.csv', "w")
n = 0
for line in lines:
    n += 1
    if ((n % 2) == 1):
            print >> file, line

我正在使用的代码只是通过查看模数值n来确定它是否实际上是每隔一行。我什至尝试过strip()rstrip()仍然需要空白行。

4

3 回答 3

11

在回答您的问题时,您的空白行来自:

print >> file, line

像这样使用print会自动输出一个新行,使用sys.stdout.write或使用尾随逗号来抑制换行符,例如:

print >> file, line,

无论如何,解决这个问题的更好方法是itertools.islice用于:

from itertools import islice

with open('input') as fin, open('output', 'w') as fout:
    fout.writelines(islice(fin, None, None, 2))

如有必要,请先过滤掉空白行,然后从中取出每第二行...

non_blanks = (line for line in fin if line.strip())
fout.writelines(islice(non_blanks, None, None, 2))

比使用模数之类的东西要方便和灵活得多。

于 2013-07-05T23:04:25.783 回答
1

尝试查看用于csv文件的 python 库。它非常全面,应该可以帮助您更干净地完成您想做的事情。

于 2013-07-05T23:05:22.447 回答
1

建议:稍微清理一下您的代码,并摆脱手动递增和声明计数器变量的需要,请使用:

for (line_index, line) in enumerate(lines): ...

于 2013-07-05T23:08:31.170 回答