【问题标题】:Python: Prevent fileinput from adding newline charactersPython:防止文件输入添加换行符
【发布时间】:2009-03-18 06:44:30
【问题描述】:

我正在使用 Python 脚本查找和替换给定目录的文本文件中的某些字符串。我正在使用fileinput 模块来简化查找和替换操作,即读取文件、替换文本并写回同一个文件。

代码如下:

import fileinput
def fixFile(fileName):
    # Open file for in-place replace
    for line in fileinput.FileInput(fileName, inplace=1):
        line = line.replace("findStr", "replaceStr")
        print line  # Put back line into file

问题是写入的文件有:

  1. 行后插入一个空行。
  2. 行末尾的Ctrl-M字符。

如何防止这些额外的附件被插入到文件中?

【问题讨论】:

    标签: python file-io


    【解决方案1】:

    您的换行符来自打印功能

    使用:

    import sys
    
    sys.stdout.write ('some stuff')
    

    你的换行符会消失

    【讨论】:

    • 非常感谢!这修复了额外的行和 Ctrl-M 字符。我已选择您的回复作为解决此问题的方法。如果您愿意,请继续为您的答案添加一些额外信息。
    • 你能补充一点吗? :)
    • 这可能已经改变了,如果我将print 换成sys.stdout.write 它会打印到控制台并且文件最终是空的。
    【解决方案2】:

    使用

    print line,
    

    file.write(line)
    

    修复额外的换行符。

    截至 [Ctrl]-[M] - 这可能是由 DOS 编码的输入文件引起的。

    【讨论】:

    • 谢谢。您的解决方案删除了​​空白行,但仍有 Ctrl-M 字符。另一个人已经提出了一个可以为我解决这两个问题的答案。
    【解决方案3】:

    而不是这个:

    print line  # Put back line into file
    

    使用这个:

    print line,  # Put back line into file
    

    【讨论】:

    • @Paul Fleming,在对我有用的打印行之后放一个 , 。你能解释一下为什么逗号会阻止换行吗?谢谢。
    • @teamg 不是我的答案,也不知道你的问题的答案。对不起!
    • @kwamke,在打印行后加一个逗号对我有用。你能解释一下为什么逗号会阻止换行吗?谢谢。
    【解决方案4】:

    将 for 循环中的第一行更改为:

    line = line.rstrip().replace("findStr", "replaceStr")

    【讨论】:

    • 请解释否决票。此方法解决了换行问题(虽然我无法重现 Ctrl-M 问题,因此无法与之交谈)。
    • 这个答案的问题在于,它本质上是一个“黑客”,删除了原来的换行符,而不是一开始就避免添加一个额外的换行符(在你发布你的答案前一年被其他答案覆盖!)。这可能就是你投反对票的原因。
    【解决方案5】:

    由于每个迭代打印语句都以换行符结尾,因此行之间出现空行。

    要解决这个问题,您可以使用 strip 和 print。

    import fileinput
    def fixFile(fileName):
      for line in fileinput.FileInput(fileName, inplace=1):
        line = line.replace("findStr", "replaceStr")
        print line.strip()
    

    现在,您可以看到空白行是条纹的。

    【讨论】:

    • 这也将删除缩进,但是,这可能是不希望的。而是使用 rstrip() :)
    【解决方案6】:

    对于 Python 3.4 的更新,您可以使用:

    print(line, end = '')
    

    避免插入新行。

    【讨论】:

    • Python 4.3?? :)
    • 尽管我很喜欢在原始答案中看到 4.3,但为了避免混淆,我将其编辑为 3.4。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2021-10-23
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多