此代码从stackoverflow上的另一个地方借用,删除了csv中写入“None”的所有位置。但是,它还为csv添加了额外的一行。如何更改此代码以删除该额外行?我认为问题是由inplace
引起的,但是当我从inplace
开始,文件不再通过运行代码而改变。
def cleanOutputFile(filename):
for line in fileinput.FileInput(filename,inplace=1):
line = line.replace('None',"")
print line
谢谢!
答案 0 :(得分:3)
如果您要替换所有None's
:
with open(filename) as f:
lines = f.read().replace("None","")
with open(filename,"w") as f1:
f1.write(lines)
将rstrip
与fileinput
一起使用也应该有效:
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)
此处的问题与fileinput
或replace
无关。
从文件中读取的行总是以换行符结尾。
print
添加换行符,即使您正在打印的内容已经以换行符结尾。
即使涉及文件,您也可以看到这一点:
>>> a = 'abc'
>>> print a
abc
>>> a = 'abc\n'
>>> print a
abc
>>>
解决方案是以下任何一种:
rstrip
关闭输入的换行符:print line.rstrip('\n')
(或者在处理过程中执行此操作)print
添加换行符:print line,
print
与from __future__ import print_function
一起使用,这样您就可以使用更灵活的关键字参数:print(line, end='')
sys.stdout.write
代替print
。