Escribir cadena en un archivo en una nueva línea cada vez

259

Quiero agregar una nueva línea a mi cadena cada vez que llamo file.write(). ¿Cuál es la forma más fácil de hacer esto en Python?

kaushik
fuente

Respuestas:

294

Use "\ n":

file.write("My String\n")

Consulte el manual de Python como referencia.

Halfdan
fuente
3
Si está utilizando variables para componer el registro, puede agregar + "\ n" al final, como fileLog.write (var1 + var2 + "\ n").
Filipe
44
En las nuevas versiones de Python (3.6+) también puede simplemente utilizar F-cuerdas:file.write(f"{var1}\n")
Halfdan
109

Puede hacer esto de dos maneras:

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

o, dependiendo de su versión de Python (2 o 3):

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x
Greg Hewgill
fuente
Estoy utilizando f.writelines (str (x)) para escribir en un archivo donde x es la lista que ahora dicen cómo escribir una lista x en un archivo de afrontamiento cada lista a partir de la nueva línea
kaushik
2
@kaushik: f.write ('\ n'.join (x)) o f.writelines (i +' \ n 'para i en x)
Steven
Creo que el método f.write es mejor ya que puede usarse tanto en Python 2 como en 3.
Dang Manh Truong
78

Puedes usar:

file.write(your_string + '\n')
Krishna K
fuente
3
puede usar el uso, por ejemplo, cuando escribe un int en un archivo, puede usar file.write (str (a) + '\ n')
未来 陆家嘴 顶尖 的 投资 人
@xikhari ¿Por qué? file.write(f"my number is: {number}\n")está bien y legible.
Guimoute
25

Si lo usa extensamente (muchas líneas escritas), puede subclasificar 'archivo':

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')

Ahora ofrece una función adicional wl que hace lo que quieres:

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

Tal vez me falta algo como diferentes caracteres de nueva línea (\ n, \ r, ...) o que la última línea también termina con una nueva línea, pero funciona para mí.

mathause
fuente
1
No es necesario return Noneen este caso porque primero, no lo necesita y segundo, cada función de Python regresa Nonepor defecto cuando no hay una returndeclaración.
Anna
10

Podrías hacerlo:

file.write(your_string + '\n')

como lo sugiere otra respuesta, pero ¿por qué usar la concatenación de cadenas (lenta, propensa a errores) cuando puede llamar file.writedos veces:

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

tenga en cuenta que las escrituras se almacenan en búfer, por lo que equivale a lo mismo.

Jean-François Fabre
fuente
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")

o

log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")
Panos Kal.
fuente
44
Abrir un archivo con "a" como parámetro en lugar de "w" no cambia la función de escritura para que funcione de la manera que usted describió. El único efecto que tiene es que el archivo no se sobrescribirá y el texto se agregará a la línea inferior en lugar de comenzar en la parte superior izquierda de un archivo en blanco.
Democidista
2

Solo una nota, fileno es compatible Python 3y se eliminó. Puede hacer lo mismo con la openfunción incorporada.

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

A menos que escriba en archivos binarios, use print. El siguiente ejemplo es bueno para formatear archivos 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:

Mesco
fuente
2

Otra solución que escribe desde una lista usando fstring

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

Esta es la solución que se me ocurrió al tratar de resolver este problema por mí mismo para producir sistemáticamente \ n's como separadores. Escribe usando una lista de cadenas donde cada cadena es una línea del archivo, sin embargo, parece que también puede funcionar para usted. (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 ""
democidista
fuente
¿Por qué no simplemente with open(path, "w") as file: for line in strList: file.write(line + "\n")? De esta manera, puede eliminar todo el trabajo de la lista, la verificación y tener solo 3 líneas.
Guimoute