使用Python从csv中删除行也会增加额外的行

时间:2014-09-19 18:19:14

标签: python csv

此代码从stackoverflow上的另一个地方借用,删除了csv中写入“None”的所有位置。但是,它还为csv添加了额外的一行。如何更改此代码以删除该额外行?我认为问题是由inplace引起的,但是当我从inplace开始,文件不再通过运行代码而改变。

def cleanOutputFile(filename):
    for line in fileinput.FileInput(filename,inplace=1):
        line = line.replace('None',"")
        print line  

谢谢!

2 个答案:

答案 0 :(得分:3)

如果您要替换所有None's

with open(filename) as f:
     lines = f.read().replace("None","")
with open(filename,"w") as f1:
     f1.write(lines)

rstripfileinput一起使用也应该有效:

import fileinput
for line in fileinput.FileInput(fileinput,inplace=1):
        print  line.replace('None',"").rstrip() # remove newline character to avoid adding extra lines in the output

答案 1 :(得分:3)

此处的问题与fileinputreplace无关。

从文件中读取的行总是以换行符结尾。

print添加换行符,即使您正在打印的内容已经以换行符结尾。

即使涉及文件,您也可以看到这一点:

>>> a = 'abc'
>>> print a
abc
>>> a = 'abc\n'
>>> print a
abc

>>>

解决方案是以下任何一种:

  • rstrip关闭输入的换行符:print line.rstrip('\n')(或者在处理过程中执行此操作)
  • 使用“魔术逗号”阻止print添加换行符:print line,
  • 将Python 3样式的printfrom __future__ import print_function一起使用,这样您就可以使用更灵活的关键字参数:print(line, end='')
  • 使用sys.stdout.write代替print
  • 完全重新组织您的代码,这样您就不再写入stdout,而是直接写入临时文件,或将整个文件读入内存,然后将其写回等等。