tablas que para libreria leer funciones extraer datos con archivo python

que - libreria lxml python



¿Cómo leer y escribir varios archivos? (6)

Acabo de enterarme del comando os.walk () recientemente y puede ser útil aquí. Le permite recorrer una estructura de árbol de directorios.

import os OUTPUT_DIR = ''C://RESULTS'' for path, dirs, files in os.walk(''.''): for file in files: read_f = open(os.join(path,file),''r'') write_f = open(os.path.join(OUTPUT_DIR,file)) # Do stuff

Quiero escribir un programa para esto: en una carpeta tengo n cantidad de archivos; primero lea un archivo y realice alguna operación, luego guarde el resultado en un archivo separado. Luego lea el segundo archivo, vuelva a realizar la operación y guarde el resultado en el segundo archivo nuevo. Haga el mismo procedimiento para n cantidad de archivos. El programa lee todos los archivos uno por uno y almacena los resultados de cada archivo por separado. Da ejemplos de cómo puedo hacerlo.


Creo que lo que extrañas es cómo recuperar todos los archivos en ese directorio. Para hacerlo, usa el módulo glob. Aquí hay un ejemplo que duplicará todos los archivos con extensión * .txt a archivos con extensión * .out

import glob list_of_files = glob.glob(''./*.txt'') # create the list of file for file_name in list_of_files: FI = open(file_name, ''r'') FO = open(file_name.replace(''txt'', ''out''), ''w'') for line in FI: FO.write(line) FI.close() FO.close()


Respuesta combinada que incorpora directorio o lista específica de argumentos de nombres de archivo:

import sys import os.path import glob def processFile(filename): fileHandle = open(filename, "r") for line in fileHandle: # do some processing pass fileHandle.close() def outputResults(filename): output_filemask = "out" fileHandle = open("%s.%s" % (filename, output_filemask), "w") # do some processing fileHandle.write(''processed/n'') fileHandle.close() def processFiles(args): input_filemask = "log" directory = args[1] if os.path.isdir(directory): print "processing a directory" list_of_files = glob.glob(''%s/*.%s'' % (directory, input_filemask)) else: print "processing a list of files" list_of_files = sys.argv[1:] for file_name in list_of_files: print file_name processFile(file_name) outputResults(file_name) if __name__ == ''__main__'': if (len(sys.argv) > 1): processFiles(sys.argv) else: print ''usage message''


import sys # argv is your commandline arguments, argv[0] is your program name, so skip it for n in sys.argv[1:]: print(n) #print out the filename we are currently processing input = open(n, "r") output = open(n + ".out", "w") # do some processing input.close() output.close()

Entonces llámalo así:

./foo.py bar.txt baz.txt


from pylab import * import csv import os import glob import re x=[] y=[] f=open("one.txt",''w'') for infile in glob.glob((''*.csv'')): # print "" +infile csv23=csv2rec(""+infile,''rb'',delimiter='','') for line in csv23: x.append(line[1]) # print len(x) for i in range(3000,8000): y.append(x[i]) print ""+infile,"/t",mean(y) print >>f,""+infile,"/t/t",mean(y) del y[:len(y)] del x[:len(x)]


Puede encontrar útil el módulo de entrada de fileinput . Está diseñado para exactamente este problema.