2010-04-04 13 views
14

Si tenemos que escribir una nueva línea en un archivo que tiene que codificar:¿Por qué el lenguaje Python no tiene un método writeln()?

file_output.write('Fooo line \n') 

¿Hay alguna razón por la Python no tiene un método writeln()?

+7

Da la vuelta a la pregunta: ¿por qué algunos idiomas usan diferentes funciones para la salida dependiendo de si deseas incluir un salto de línea final o no? Esto se remonta, al menos, al pascal, que aprendí desde el principio, pero prefiero la representación explícita en las líneas nuevas en el resultado. – dmckee

+0

Puede consultar [esta respuesta] (http://stackoverflow.com/a/16085543/910963) desde otra publicación si la necesita – SimplyKnownAsG

Respuesta

8

Se omite para proporcionar una interfaz simétrica de los métodos file y porque un writeln() tendría ningún sentido :

  • read() partidos write() : Ambos operan sobre los datos en bruto
  • readlines() los partidos writelines(): ambos operan en las líneas incluidas sus EOLs
  • readline() se usa raramente; un iterador hace el mismo trabajo (con excepción de la size parámetro opcional)

Un writeline() (o writeln()) sería esencialmente el mismo que write(), ya que no sería añadir una EOL (para que coincida con el comportamiento de writelines()) .

La mejor manera de imitar una print a un archivo es utilizar la sintaxis especial entre la impresión y archivo de Python 2.x o la palabra clave file argumento de la función print(), como Daniel sugirió.

Personalmente, prefiero la sintaxis print >>file, ... sobre file.write('...\n').

+2

@eftinis, dado que 'readline' existe, su enunciado de" simetría "en realidad no se cumple. El uso poco común de un método 'readline' tampoco impide su beneficio en ciertas situaciones (por ejemplo, analizadores sintácticos que podrían necesitar leer una línea o dos más adelante). – SimplyKnownAsG

0

Probablemente no sea una razón real, solo que es realmente fácil escribir una línea nueva cuando la necesita, entonces ¿para qué complicar la interfaz del archivo con un método adicional solo para hacer eso?

+0

¿Suele utilizar la sintaxis utilizada en mi pregunta? – systempuntoout

+0

La función 'print' de Python imprime una nueva línea al final de la cadena de forma predeterminada. –

+1

Para responder a la pregunta que pretende ser retórica: eficiencia. Considere (1) 'f.write (cosas); f.write ('\ n') (2) 'f.write (cosas + '\ n')' (3) 'f.writeln (cosas)' –

19

En Python 2, el uso:

print >>file_output, 'Fooo line ' 

En Python 3, uso:

print('Fooo line ', file=file_output) 
+0

Gracias por las sugerencias – systempuntoout

2

print() es la función que está buscando. Al igual que gran parte del polimorfismo central en python, la impresión es proporcionada por una función incorporada en lugar de usar métodos (al igual que len(), next(), repr() etc.).

La función print() que es la interfaz universal también la hace más versátil, sin que los objetos de archivo tengan que implementarla. En este caso, el valor predeterminado es la terminación de línea nueva, sino que se pueden elegir en la llamada de función, por ejemplo:

print("text", file=sys.stderr, end="\n") 

en su caso de uso indicado, todos los objetos de archivo tendrían que aplicar no sólo un método .write() (ahora utilizado por print()), pero también .writeln(), ¡y tal vez aún más! Este polimorfismo basado en funciones hace que Python sea muy rico, sin cargar las interfaces (recuerda cómo funciona la escritura de patos).

Nota: Este modelo siempre ha estado en el centro de Python.Es solo más puro en mis ejemplos, que pertenecen a Python 3

2

Creo que debería. Lo más cercano que puedes usar es:

file_output.writelines([foo_msg, '\n']) 
Cuestiones relacionadas