使用Python从csv中删除行也会添加一个额外的lin

2024-10-01 11:37:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

谢谢!在


Tags: 文件csv代码innonefordef地方
2条回答

这里的问题与fileinput或{}无关。在

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

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

您甚至可以在不涉及文件的情况下看到:

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

>>>

解决方案如下:

  • rstrip输入的换行符:print line.rstrip('\n')(或者在处理过程的早期执行剥离)
  • 使用“魔术逗号”来防止print添加换行符:print line,
  • 使用python3样式printfrom __future__ import print_function,这样就可以使用更灵活的关键字参数:print(line, end='')
  • 使用sys.stdout.write代替print。在
  • 完全重新组织你的代码,这样你就不再写stdout了,而是直接写入一个临时文件,或者把整个文件读入内存,然后再写出来,等等

如果要替换所有None's

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

rstripfileinput一起使用也可以:

^{pr2}$

相关问题 更多 >