Pregunta sobre file, file-io, python – Leyendo y escribiendo archivos en Python

1

Estoy escribiendo un script que tiene dos entradas:

un archivo que contiene una lista de nombres,un archivo diferente (puede estar vacío o no vacío)

El propósito de la secuencia de comandos es tomar los nombres del primer archivo, acceder a una determinada API y obtener información sobre cada nombre, luego escribir esa información en el segundo archivo. Si el segundo archivo ya contiene información, la secuencia de comandos lee la última línea del archivo escrito, encuentra esa entrada en el primer archivo y luego comienza a partir de esa entrada. Sin embargo, tengo problemas cuando se trata de leer y escribir en el segundo archivo.

Cuando configuro el segundo tipo de archivo en "r +" y luego hago una impresión en file_two.read (), muestra el contenido del segundo archivo. Cuando hago otra impresión en la siguiente línea, muestra el archivo como vacío. Además, cuando configuro el tipo de archivo en "a +", muestra que el archivo está completamente vacío en ambas ocasiones, aunque puedo ver claramente que la información en el archivo de texto está ahí. Alguien sabe que esta pasando?

Aquí está el segmento de código que maneja la escritura:

<code>def write_to_file(filename, users):
    pages = range(0, len(users) - 100, 100)
    for page in pages:
        user_names = get_users(users[page: page+100])
        lines = [format_user(user) for user in user_names]
        output_text = '\n'.join(lines)
        with filename as output_file:
            output_file.write(output_text.encode('utf-8'))
</code>

y aquí está el segmento de código que llama a la función anterior.

<code>file_one = args.file1
file_two = args.file2
users = read_names_automatic(file_one)
write_to_file(file_two, users)
</code>
el archivo ya se abrió anteriormente en el script usando argparse, este código simplemente escribe toda la información en el archivo, luego cierra el archivo una vez que está listo. user1389884
Eswith filename as output_file: ¿un error? Creo que quieres decirwith open(filename, 'a+') as output_file:. modocache

Tu respuesta

1   la respuesta
3

r +" y luego hago una impresión en file_two.read (), muestra el contenido del segundo archivo. Cuando hago otra impresión en la siguiente línea, muestra el archivo como vacío.

Sí, este es el comportamiento esperado. El puntero del archivo apunta al final del archivo al final defile_two.read(), por lo que cualquier intento de leer más retorna una cadena vacía. Por ejemplo, echa un vistazo a lo siguiente:

<code>with open("test.txt") as f:
    print f.readline() # => prints the first line, sets file pointer to second line
    print f.read() # => prints everything from the second line on
</code>

Para restablecer el puntero del archivo al principio del archivo:

<code>with open("test.txt") as f:
    print f.read() # => prints entire file, sets file pointer to end of file
    f.seek(0) # => reset file pointer to beginning of file
    print f.read() # => prints entire file
</code>

Además, cuando configuro el tipo de archivo en "a +", muestra que el archivo está completamente vacío en ambas ocasiones, aunque puedo ver claramente que la información en el archivo de texto está ahí.

Cuando túopen("test.txt", "a+"), el puntero del archivo se establece al final del archivo, por lo que cualquier intento de leer producirá una cadena vacía. De hecho, esto es lo que te permiteadjuntar al archivo. Si tufile_two.seek(0) y entoncesfile_two.write(), el texto escrito se agregará al comienzo defile_two.

Preguntas relacionadas