【问题标题】:How to write to a file with newline characters and avoid empty lines如何使用换行符写入文件并避免空行
【发布时间】:2020-02-24 02:24:06
【问题描述】:

我正在尝试将编码数据写入文件并用换行符分隔每次运行。但是,执行此操作时,每次运行之间都会有一个空行 - 如下所示。

使用 .rstrip()/.strip() 仅在读取文件时才真正起作用——显然这不能在写入文件时直接使用,因为它会将所有数据写入一行。

cFile = open('compFile', 'w')
for i in range(num_lines):
    line = validLine()
    compressedFile.write(line + "\n")
cFile.close()

cFile = open('compFile', 'r')
for line in cFile:
    print(line)


# Empty space output:

023

034

045

# Desired output:

023
034
045

【问题讨论】:

  • 字符串剥离在任何时候你都有字符串。写 after 剥离时只需添加换行符。

标签: python file newline


【解决方案1】:

使用 .rstrip()/.strip() 仅在读取文件时才真正起作用——显然这不能在写入文件时直接使用,因为它会将所有数据写入一行。

这是一种误解。如果您需要编写一系列字符串,则使用.rstrip() 正是正确的工具,其中一些可能带有换行符:

with open('compFile', 'w') as cFile:
    for i in range(num_lines):
        line = validLine().rstrip("\n") # remove possible newline
        compressedFile.write(line + "\n")

请注意,如果所有行都已附加换行符,则无需添加更多换行符。只需将字符串直接写入文件,无需剥离:

with open('compFile', 'w') as cFile:
    for i in range(num_lines):
        line = validLine()  # line with "\n" newline already present
        compressedFile.write(line)  # no need to add a newline anymore

接下来,您将从文件中读取行换行,然后使用print() 打印它们。默认情况下,print() 添加另一个换行符,因此您最终会得到双倍行距;您的输入文件包含023\n034\n045\n,但打印每一行('023\n',然后是'034\n',然后是'045\n')之后会添加一个换行符,然后您将023\n\n034\n\n045\n\n写出到stdout

要么在打印时去掉换行符,要么告诉print()不要添加自己的换行符,给它一个空的end参数:

with open('compFile', 'r') as cFile: 
    for line in cFile:
        print(line, end='')

【讨论】:

    【解决方案2】:

    如果你看看你的文本文件,我想你已经做了你想做的事。

    请注意,python 也会读取文件末尾的 \n 并且 print() 在打印行的末尾创建一个换行符。

    在你的情况下,这意味着你的文件应该看起来像

    023\n

    034\n

    045\n

    打印时,您首先读取 023\n,然后像 python 对 print() 函数所做的那样,将一个 \n 附加到您的行。

    然后你就有了 023\n\n 你在你的控制台中。但在文件中你有你想要的。

    如果只想打印不换行,可以使用

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

    【讨论】:

    • 您也可以使用 print(text, end="") 进行不换行的打印。 end 的默认值是换行符。
    【解决方案3】:

    你可以使用

    for i in range(num_lines):
        line = validLine()
        compressedFile.write(line.strip() + "\n")
        #                          ^^^   
    cFile.close()
    

    题外话,但考虑另外使用with ()

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 2012-05-16
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 2012-07-06
      相关资源
      最近更新 更多