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?

Respuestas:


294

Use "\ n":

file.write("My String\n")

Consulte el manual de Python como referencia.


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

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


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í.


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.


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

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

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:


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

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 ""

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.