Как записать в файл символы новой строки и избежать пустых строк - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь записать закодированные данные в файл и разделить каждый запуск символом новой строки. Тем не менее, при этом есть пустая строка между каждым прогоном - как показано ниже.

Использование .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 ]

1 голос
/ 28 октября 2019

Я думаю, что вы уже сделали то, что хотите, если посмотрите на свой текстовый файл.

Имейте в виду, что python читает \ n в конце вашего файла и что print () делаетсимвол новой строки в конце напечатанной строки.

В вашем случае это означает, что ваш файл должен выглядеть следующим образом:

023 \ n

034 \ n

045 \ n

При печати сначала вы читаете 023 \ n, а затем, как это делает python с функцией print (), вы добавляете \ n к своей строке.

Тогда у вас есть 023 \ n \ n, которые вы получаете в своей консоли. Но в файле у вас есть то, что вы хотите.

Если вы просто хотите печатать без перевода строки, вы можете использовать

import sys
sys.stdout.write('.')
0 голосов
/ 28 октября 2019

Использование .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='')
0 голосов
/ 28 октября 2019

Вы можете использовать

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

Не по теме, но рассмотрите возможность использования with () дополнительно.

...