J'ai un script python parse.py, qui dans le script ouvre un fichier, disons fichier1, puis fait quelque chose qui affiche peut-être le nombre total de caractères.
filename = 'file1'
f = open(filename, 'r')
content = f.read()
print filename, len(content)
En ce moment, j’utilise stdout pour diriger le résultat dans mon fichier de sortie - output
python parse.py >> output
Cependant, je ne veux pas faire ce fichier par fichier manuellement, existe-t-il un moyen de gérer automatiquement chaque fichier? Comme
ls | awk '{print}' | python parse.py >> output
Alors le problème est comment puis-je lire le nom du fichier standardin? ou y a-t-il déjà des fonctions intégrées pour faire les ls et ce genre de travail facilement?
Merci!
Vous pouvez lister tous les fichiers du répertoire courant en utilisant:
import os
for filename in os.listdir(os.getcwd()):
# do your stuff
Vous pouvez également ne répertorier que certains fichiers, en fonction du modèle de fichier, à l'aide du module glob
:
import glob
for filename in glob.glob('*.txt'):
# do your stuff
Ce n'est pas obligatoirement le répertoire courant, vous pouvez les lister dans le chemin que vous voulez:
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
Ou vous pouvez même utiliser le tuyau comme vous l'avez spécifié à l'aide de fileinput
import fileinput
for line in fileinput.input():
# do your stuff
Et puis utilisez-le avec la tuyauterie:
ls -1 | python parse.py
vous devriez essayer d'utiliser 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
Vous pouvez en fait simplement utiliser module os pour faire les deux:
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
Maintenant, vous avez non seulement répertorié tous les fichiers d’un dossier, mais vous les avez également classés (par option) par nom de départ, type de fichier, etc. En ce moment, parcourez chaque liste et faites votre travail.
Je cherchais cette réponse:
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))
vous pouvez également choisir '* .txt' ou d'autres extrémités de votre nom de fichier
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('')