Me gusta separar las preocupaciones en situaciones como esta: creo que realmente hace que el código sea más limpio, más fácil de mantener y puede ser más eficiente.
Aquí tiene 3 inquietudes: leer un archivo UTF-8, procesar las líneas y escribir un archivo UTF-8. Suponiendo que su procesamiento se basa en líneas, esto funciona perfectamente en Python, ya que la apertura e iteración sobre las líneas de un archivo está integrada en el idioma. Además de ser más claro, esto también es más eficiente, ya que le permite procesar archivos enormes que no caben en la memoria. Finalmente, le ofrece una excelente manera de probar su código, ya que el procesamiento está separado del archivo, le permite escribir pruebas unitarias o incluso simplemente ejecutar el código de procesamiento en texto de ejemplo y revisar manualmente el resultado sin manipular los archivos.
Estoy convirtiendo las líneas en mayúsculas a modo de ejemplo, presumiblemente su procesamiento será más interesante. Me gusta usar el rendimiento aquí: facilita el procesamiento para eliminar o insertar líneas adicionales, aunque eso no se está utilizando en mi ejemplo trivial.
def process(lines):
for line in lines:
yield line.upper()
with codecs.open(file1, 'r', 'utf-8') as infile:
with codecs.open(file2, 'w', 'utf-8') as outfile:
for line in process(infile):
outfile.write(line)
"El archivo no debe sobrescribirse". ¿Por qué solo hay uno abierto si está leyendo un archivo y está escribiendo un nuevo archivo? –
porque este es un código inacabado. ... – Gusto
"porque este es un código inacabado"? ¿Qué? "sin terminar" no es una buena explicación para la falta de coincidencia entre sus requisitos y su código. ¿Por qué solo hay uno abierto? Por favor, corrija su código para que coincida con sus requisitos un poco mejor. –