每隔一行读取并打印到新文件中

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(),但仍然保留了空行。

你已经使用 readlines()[::2] 抓取到每个其他行了。 - Prashant Kumar
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))

比起进行模运算等操作,更加方便灵活。


1

尝试查看Python库中关于csv文件的内容。它非常全面,可以帮助您更清晰地完成所需操作。


1

一条建议:为了让你的代码更加简洁,不需要手动增加和声明计数器变量,可以使用以下方式:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接