copiar borrar archivos python file pipe stdout stdin

python - borrar - ¿Cómo abrir cada archivo en una carpeta?



copiar archivos python (6)

Solución fácil

Si desea simplemente abrir todos los archivos en la raíz de un directorio. Me he encontrado con este problema muchas veces, así que creé un módulo fácil de usar tanto para Python 3.5 como para Python 2.7. Si su versión de Python no es compatible, solo pregúnteme en GreyCadet IRC y agregaré el soporte.

Instalando el módulo

pip install filemapper

Uso

Considere una estructura de directorios como esta y que main.py es su código.

-Program -resources nouns.txt config.dat help.txt main.py

Contenido de main.py

import filemapper as fm all_files = fm.load(''resources'') # fm.load(''resources'',''w'') will open in write mode for f in all_files: for i in fm.read(f):print i

Esto imprimirá las líneas de cada archivo en la carpeta de recursos. También puedes pasar cualquier modo.

Hacer más

Si desea hacer algo más que abrir archivos utilizando este módulo, visite la página GitHub de FileMapper para obtener más detalles.

Tengo un script python parse.py, que en el script abre un archivo, digamos file1, y luego hago algo, tal vez imprima el número total de caracteres.

filename = ''file1'' f = open(filename, ''r'') content = f.read() print filename, len(content)

En este momento, estoy usando stdout para dirigir el resultado a mi archivo de salida - salida

python parse.py >> output

Sin embargo, no quiero hacer este archivo por archivo manualmente, ¿hay alguna manera de cuidar cada archivo automáticamente? Me gusta

ls | awk ''{print}'' | python parse.py >> output

Entonces el problema es ¿cómo podría leer el nombre de archivo de standardin? o ya hay algunas funciones integradas para hacer el ls y ese tipo de trabajo fácilmente?

¡Gracias!


Estaba buscando esta respuesta:

import os,glob folder_path = ''/some/path/to/file'' for filename in glob.glob(os.path.join(folder_path, ''*.htm'')): with open(filename, ''r'') as f: text = f.read() print (filename) print (len(text))

puede elegir también ''* .txt'' u otros extremos de su nombre de archivo


Puede enumerar todos los archivos en el directorio actual usando:

import os for filename in os.listdir(os.getcwd()): # do your stuff

O puede enumerar solo algunos archivos, según el patrón de archivo que utiliza el módulo glob :

import glob for filename in glob.glob(''*.txt''): # do your stuff

No tiene que ser el directorio actual, puede enumerarlos en la ruta que desee:

path = ''/some/path/to/file'' for filename in os.listdir(path): # do your stuff for filename in glob.glob(os.path.join(path, ''*.txt'')): # do your stuff

O incluso puedes usar la tubería como lo especificaste usando la entrada de fileinput

import fileinput for line in fileinput.input(): # do your stuff

Y luego usarlo con tubería:

ls -1 | python parse.py


deberías intentar usar os.walk

yourpath = ''path'' import os for root, dirs, files in os.walk(yourpath, topdown=False): for name in files: print(os.path.join(root, name)) stuff for name in dirs: print(os.path.join(root, name)) stuff


En realidad, puedes usar el módulo os para hacer ambas cosas:

  1. enumera todos los archivos en una carpeta
  2. ordenar los archivos por tipo de archivo, nombre de archivo, etc.

Aquí hay un ejemplo simple:

import os #os module imported here location = os.getcwd() # get present working directory location here counter = 0 #keep a count of all files found csvfiles = [] #list to store all csv files found at location filebeginwithhello = [] # list to keep all files that begin with ''hello'' otherfiles = [] #list to keep any other file that do not match the criteria for file in os.listdir(location): try: if file.endswith(".csv"): print "csv file found:/t", file csvfiles.append(str(file)) counter = counter+1 elif file.startswith("hello") and file.endswith(".csv"): #because some files may start with hello and also be a csv file print "csv file found:/t", file csvfiles.append(str(file)) counter = counter+1 elif file.startswith("hello"): print "hello files found: /t", file filebeginwithhello.append(file) counter = counter+1 else: otherfiles.append(file) counter = counter+1 except Exception as e: raise e print "No files found here!" print "Total files found:/t", counter

Ahora no solo ha enumerado todos los archivos en una carpeta, sino que los ha ordenado (opcionalmente) por nombre de partida, tipo de archivo y otros. Simplemente itera sobre cada lista y haz tus cosas.


import pyautogui import keyboard import time import os import pyperclip os.chdir("target directory) cwd=os.getcwd() files=[] for i in os.walk(cwd): for j in i[2]: files.append(os.path.abspath(j)) os.startfile("C:/Program Files (x86)/Adobe/Acrobat 11.0/Acrobat/Acrobat.exe") time.sleep(1) for i in files: print(i) pyperclip.copy(i) keyboard.press(''ctrl'') keyboard.press_and_release(''o'') keyboard.release(''ctrl'') time.sleep(1) keyboard.press(''ctrl'') keyboard.press_and_release(''v'') keyboard.release(''ctrl'') time.sleep(1) keyboard.press_and_release(''enter'') keyboard.press(''ctrl'') keyboard.press_and_release(''p'') keyboard.release(''ctrl'') keyboard.press_and_release(''enter'') time.sleep(3) keyboard.press(''ctrl'') keyboard.press_and_release(''w'') keyboard.release(''ctrl'') pyperclip.copy('''')