Writelines en Python

Subodh Adhikari 10 octubre 2023
  1. Utilice los métodos write() y writelines() para escribir texto especificado en un archivo en Python
  2. Utilice los métodos write() y writelines() para escribir iterables en un archivo en Python
Writelines en Python

Este tutorial presentará y explicará la diferencia entre los métodos write() y writelines() en Python.

Utilice los métodos write() y writelines() para escribir texto especificado en un archivo en Python

El método write() espera una cadena como argumento y la escribe en el archivo. Si proporcionamos una lista de cadenas, generará una excepción. El método writelines() espera un argumento iterable. Además, el método write() muestra la salida pero no proporciona un carácter de nueva línea, mientras que el método writelines() muestra la salida y proporciona un carácter de nueva línea al final de la cadena. Es importante tener en cuenta que writelines() no inserta automáticamente una nueva línea después de cada elemento en el iterable. Tenemos que proporcionar una nueva línea por nosotros mismos. Si tenemos muchas líneas para escribir en un archivo, writelines() podría ser una mejor opción. Funciona bien porque no crea una cadena concatenada temporal, solo itera sobre las líneas.

En el programa de abajo, abrimos el archivo samplefile.txt en el modo de escritura. La variable líneas es una tupla, es decir, una colección inmutable de cadenas. Cuando intentamos ejecutar el programa, generó un error de tipo excepción. Los argumentos que proporcionamos al método write() son una tupla que causó el error. Aquí, usamos el método with para el manejo de archivos. Este método proporciona una mejor sintaxis y manejo de excepciones. Por lo tanto, es una buena práctica utilizar el método with cuando corresponda. El método es útil porque todos los archivos abiertos se cerrarán una vez que se haya terminado.

Código de ejemplo:

# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
    f.write(lines)

Producción :

TypeError: write() argument must be str, not tuple

En un contexto similar, cuando usamos writelines(), el programa se ejecuta con éxito y se crea un archivo llamado samplefile.txt donde se pasa lines como argumento al método writelines().

Código de ejemplo:

# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
    f.writelines(lines)

Producción :

Good
Morning
Sunshine

Para el mismo programa, las líneas múltiples se concatenan a una sola variable de cadena llamada lines_joined, que se acepta fácilmente como argumento para el método write().

Código de ejemplo:

# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines_joined = line1 + nl + line2 + nl + line3 + nl
with open("samplefile.txt", "w") as f:
    f.write(lines_joined)

Producción :

Good
Morning
Sunshine

Utilice los métodos write() y writelines() para escribir iterables en un archivo en Python

El método join() toma todos los elementos en un iterable y los une en una cadena. En el programa siguiente, usamos el método join() con '\n' como pegamento para concatenar la cadena en lines. Es un mejor enfoque para la concatenación en lugar de utilizar el operador +.

Código de ejemplo:

# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
    f.write("\n".join(lines))

Producción :

Hello
World

Es menos eficiente usar el método join() para una lista extremadamente larga de cadenas. En tal caso, se crea una cadena completamente nueva y muy larga en la memoria antes de escribirla. Entonces, en el programa a continuación, usamos una expresión generadora para escribir las cadenas en la nueva línea. Aquí, los datos se escriben por partes.

Código de ejemplo:

# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
    for l in lines:
        f.write("%s\n" % l)

Producción :

Hello
World

El mismo programa que el anterior se implementa mediante el método writelines(). Utiliza una expresión generadora y crea dinámicamente cadenas terminadas en una nueva línea. El método writelines() itera sobre esta secuencia de cadenas y escribe cada elemento.

Código de ejemplo:

# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as file:
    file.writelines("%s\n" % t for t in texts)

Producción :

Hello
World

Artículo relacionado - Python File