una txt lista linea leer importar exportar especifica escribir datos crear como columnas binarios archivos archivo python file

txt - leer una linea especifica de un archivo en python



Concatene mĂșltiples archivos en un solo objeto de archivo sin crear un nuevo archivo (8)

Digamos que multiple_files es una lista que contiene todos los nombres de archivos

multiple_files = ["file1.txt", "file2.txt", "file3.txt", ...] # and so on...

Abra el archivo de salida que contendrá todos

f = open("multiple_files.txt", "w") for _file in multiple_files: f.write(_file.read())

De esta manera, no tiene que leer todas y cada una de las líneas de sus archivos.

Aunque el método anterior es más simple, también tiene un módulo de entrada de archivo como alternativa.

documentos de entrada de archivo

Puede utilizar fileinput para acceder y procesar múltiples archivos.

Ejemplo :

with fileinput.input(files=(''file1.txt'', ''file2.txt'')) as f: for line in f: process(line)

Esta pregunta está relacionada con los archivos de texto de Python concatenate

Tengo una lista de nombres de file_names , como [''file1.txt'', ''file2.txt'', ...].

Me gustaría abrir todos los archivos en un solo objeto de archivo que pueda leer línea por línea, pero no quiero crear un nuevo archivo en el proceso. ¿Es eso posible?

with open(file_names, ''r'') as file_obj: line = file_obj.readline() while line: ...


EDITAR:

Como se señaló en los comentarios, esta solución probablemente no sería óptima para archivos grandes, ya que carga todo en la memoria. Una solución que use generadores sería mejor si se trata de archivos grandes. Gracias a LohmarASHAR por señalarlo!

Simplemente puede crear en la lista grande de todos los archivos haciendo un bucle sobre la lista de nombres de archivos. Esto no crearía un nuevo objeto de archivo, solo un nuevo objeto de lista:

filenames = ["f1.txt", "f2.txt", "f3.txt"] # list to store each line of the file output = [] # iterate over list of filenames for text_file in filenames: # open file with open(text_file) as f: # iterate over each line in the file and add to output for line in f.readlines(): output.append(line)

No es que no estemos llamando explícitamente a close() en el archivo, esto se debe a que la instrucción with... cerrará el archivo por nosotros tan pronto como salga de su alcance.

Si puede usar bibliotecas externas, puede que valga la pena analizar los pandas para almacenar los datos del archivo en objetos eficientes y fáciles de usar.


En lugar de hacer que Python lea varios archivos, canalice el contenido desde el shell y léalo desde la entrada estándar. Esto también hará que su programa sea más flexible, ya que puede pasar cualquier conjunto de archivos a su programa de Python sin cambiar su código.


La forma más sencilla, es utilizar itertools.chain ,

que proporcionan una manera fácil de leer desde múltiples iteradores.

Haga un iterador que devuelva elementos desde el primer iterable hasta que se agote, luego pase al siguiente iterable, hasta que todos los iterables estén agotados. Se utiliza para tratar secuencias consecutivas como una secuencia única.

Supongamos que tiene los archivos: file1.txt y file2.txt .

file1.txt datos de file1.txt son:

file1 line1 file1 line2

Y, de la misma manera, los datos de file2.txt son:

file2 line1 file2 line2

Este codigo

for f in chain(map(open, [''file1.txt'', ''file2.txt''])): for line in f: print(line.strip())

dará salida a esto:

file1 line1 file1 line2 file2 line1 file2 line2


Puede utilizar el paquete fileinput. Este módulo implementa una clase de ayuda y funciones para escribir rápidamente un bucle sobre una lista de archivos

import fileinput with fileinput.input(files=(''file1.txt'', ''file2.txt'', ''file3.txt'')) as f: for line in f: #rest code


Usando incorporaciones:

product=[] for File in [''file1.txt'',''file2.txt'',''file3.txt'']: for line in open(File,''r'').readlines(): product.append(line) for line in product:print(line)

file.readlines () envía el contenido a una lista y el archivo se cierra.

También podrías escribir:

product=[] for File in [''file1.txt'',''file2.txt'',''file3.txt'']: product+=open(File).readlines()

Es más corto y probablemente más rápido, pero uso el primero porque me parece mejor.

Aclamaciones


Utilice la input del módulo fileinput . Se lee de varios archivos, pero parece que las cadenas provienen de un solo archivo. (Iteración de la línea perezosa).

import fileinput files= [''F:/files/a.txt'',''F:/files/c.txt'',''F:/files/c.txt''] allfiles = fileinput.input(files) for line in allfiles: # this will iterate over lines in all the files print(line) # or read lines like this: allfiles.readline()

Si necesitas todo el texto en un solo lugar usa StringIO

import io files= [''F:/files/a.txt'',''F:/files/c.txt'',''F:/files/c.txt''] lines = io.StringIO() #file like object to store all lines for file_dir in files: with open(file_dir, ''r'') as file: lines.write(file.read()) lines.write(''/n'') lines.seek(0) # now you can treat this like a file like object print(lines.read())


intente algo en este sentido:

def read_files(*filenames): for filename in filenames: with open(filename,''r'') as file_obj: for line in file_obj: yield line

puedes llamarlo con

for line in read_files("f1.txt", "f2.txt", "f3.txt"): #... do whatever with the line

o

filenames = ["f1.txt", "f2.txt", "f3.txt"] for line in read_files(*filenames): #... do whatever with the line