web-dev-qa-db-fra.com

Comment ouvrir tous les fichiers d'un dossier?

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!

102
B.Mr.W.

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
257
Viktor Kerkez

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
25
le_vine

Vous pouvez en fait simplement utiliser module os pour faire les deux:

  1. lister tous les fichiers d'un dossier
  2. trier les fichiers par type de fichier, nom de fichier, etc. 

Voici un exemple 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

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.

7
geekidharsh

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

5
Andrei
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('')
0
RockwellS