Gravando string em um arquivo em uma nova linha sempre


259

Quero acrescentar uma nova linha à minha string sempre que ligar file.write(). Qual é a maneira mais fácil de fazer isso no Python?

Respostas:


294

Use "\ n":

file.write("My String\n")

Veja o manual do Python para referência.


3
Se você estiver usando variáveis ​​para compor o registro, poderá adicionar + "\ n" ao final, como fileLog.write (var1 + var2 + "\ n").
Filipe

4
Nas versões mais recentes do Python (3.6+), você também pode usar apenas f-strings:file.write(f"{var1}\n")
halfdan

109

Você pode fazer isso de duas maneiras:

f.write("text to write\n")

ou, dependendo da sua versão do Python (2 ou 3):

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x

Eu estou usando f.writelines (str (x)) para escrever em um arquivo onde x é a lista agora dizem como escrever uma lista x em um arquivo de lidar cada lista começando em nova linha
kaushik

2
@kaushik: f.write ('\ n'.join (x)) ou f.writelines (i +' \ n 'para i in x)
Steven

Eu acho que o método f.write é melhor, pois ele pode ser usado tanto em Python 2 e 3.
Dang Manh Truong


25

Se você o usar extensivamente (muitas linhas escritas), poderá subclassificar 'arquivo':

class cfile(file):
    #subclass file to have a more convienient use of writeline
    def __init__(self, name, mode = 'r'):
        self = file.__init__(self, name, mode)

    def wl(self, string):
        self.writelines(string + '\n')

Agora ele oferece uma função adicional wl que faz o que você deseja:

fid = cfile('filename.txt', 'w')
fid.wl('appends newline charachter')
fid.wl('is written on a new line')
fid.close()

Talvez esteja faltando algo como caracteres diferentes de nova linha (\ n, \ r, ...) ou que a última linha também termine com uma nova linha, mas funciona para mim.


1
Você não precisa return None, neste caso, porque em primeiro lugar, você não precisa dele e, segundo, a cada função Python retorna Nonepor padrão quando não há nenhuma returndeclaração.
Anna

10

você poderia fazer:

file.write(your_string + '\n')

conforme sugerido por outra resposta, mas por que usar a concatenação de strings (lenta, propensa a erros) quando você pode chamar file.writeduas vezes:

file.write(your_string)
file.write("\n")

observe que as gravações são armazenadas em buffer e, portanto, equivalem à mesma coisa.


6
file_path = "/path/to/yourfile.txt"
with open(file_path, 'a') as file:
    file.write("This will be added to the next line\n")

ou

log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")

4
Abrir um arquivo com "a" como parâmetro em vez de "w" não altera a gravação para funcionar da maneira que você descreveu. O único efeito é que o arquivo não será substituído e o texto será adicionado à linha inferior, em vez de começar no canto superior esquerdo de um arquivo em branco.
democidist

2

Apenas uma observação, filenão é suportada Python 3e foi removida. Você pode fazer o mesmo com a openfunção interna.

f = open('test.txt', 'w')
f.write('test\n')

2

A menos que grave em arquivos binários, use print. Abaixo exemplo bom para formatar arquivos csv:

def write_row(file_, *columns):
    print(*columns, sep='\t', end='\n', file=file_)

Uso:

PHI = 45
with open('file.csv', 'a+') as f:
    write_row(f, 'header', 'phi:', PHI, 'serie no. 2')
    write_row(f)  # newline
    write_row(f, data[0], data[1])

Notas:


2

Outra solução que escreve de uma lista usando fstring

lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
  for line in lines:
    fhandle.write(f'{line}\n')

1

Essa é a solução que eu tentei resolver esse problema para mim mesma, a fim de produzir sistematicamente \ n como separadores. Ele grava usando uma lista de strings em que cada string é uma linha do arquivo, no entanto, parece que pode funcionar para você também. (Python 3. +)

#Takes a list of strings and prints it to a file.
def writeFile(file, strList):
    line = 0
    lines = []
    while line < len(strList):
        lines.append(cheekyNew(line) + strList[line])
        line += 1
    file = open(file, "w")
    file.writelines(lines)
    file.close()

#Returns "\n" if the int entered isn't zero, otherwise "".
def cheekyNew(line):
    if line != 0:
        return "\n"
    return ""

Por que não simplesmente with open(path, "w") as file: for line in strList: file.write(line + "\n")? Dessa forma, você pode remover todo o trabalho da lista, a verificação e ter apenas 3 linhas.
Guimoute 27/11/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.