如何用换行符写入文件并避免空行

时间:2019-10-28 19:40:22

标签: python file newline

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

仅在读取文件时才使用.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

3 个答案:

答案 0 :(得分:1)

如果您查看自己的文本文件,我想您已经按照自己的意愿做了。

请注意,python也会在文件末尾读取\ n,而print()在打印行的末尾换行。

对于您而言,这意味着您的文件应类似于

  

023 \ n

     

034 \ n

     

045 \ n

打印时,您首先读取023 \ n,然后像python使用print()函数一样,将\ n附加到行中。

然后您将在控制台中看到023 \ n \ n。但是在文件中,您拥有想要的东西。

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

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

答案 1 :(得分:0)

您可以使用

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

主题外,但可以考虑另外使用with ()

答案 2 :(得分:0)

  

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

这是一个误解。如果您需要编写一系列字符串,其中 some 可能附加了换行符,那么使用.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='')