it-swarm.it

Come elenco tutti i file di una directory?

Come posso elencare tutti i file di una directory in Python e aggiungerli a un list?

3472
duhhunjonn

os.listdir() ti porterà tutto quello che c'è in una directory: file e directory.

Se vuoi just files, puoi filtrarlo usando os.path :

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

oppure potresti usare os.walk() che produrrà due liste per ogni directory che visita - dividendo in file e dir per te. Se si desidera solo la directory principale, è possibile interrompere la prima volta

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
    f.extend(filenames)
    break

Infine, come mostra l'esempio, aggiungendo una lista a un'altra è possibile utilizzare .extend() o

>>> q = [1, 2, 3]
>>> w = [4, 5, 6]
>>> q = q + w
>>> q
[1, 2, 3, 4, 5, 6]

Personalmente, preferisco .extend()

3380
pycruft

Preferisco usare il modulo glob , poiché esegue la corrispondenza e l'espansione dei pattern.

import glob
print(glob.glob("/home/adam/*.txt"))

Restituirà una lista con i file interrogati:

['/home/adam/file1.txt', '/home/adam/file2.txt', .... ]
1351
adamk
import os
os.listdir("somedirectory")

restituirà un elenco di tutti i file e le directory in "somedirectory".

645
sepp2k

Ottieni un elenco di file con Python 2 e 3


Ho anche realizzato un breve video qui:   Python: come ottenere un elenco di file in una directory


os.listdir ()

o ..... come ottenere tutti i file (e le directory) nella directory corrente (Python 3)

Il modo più semplice per avere il file nella directory corrente in Python 3 è questo. È davvero semplice; usa il modulo os e la funzione listdir() e avrai il file in quella directory (e le eventuali cartelle che si trovano nella directory, ma non avrai il file nella sottodirectory, per cui puoi usare walk - parlerò di più tardi).

>>> import os
>>> arr = os.listdir()
>>> arr
['$RECYCLE.BIN', 'work.txt', '3ebooks.txt', 'documents']

Utilizzo di glob

Ho trovato glob più facile selezionare il file dello stesso tipo o con qualcosa in comune. Guarda il seguente esempio:

import glob

txtfiles = []
for file in glob.glob("*.txt"):
    txtfiles.append(file)

Using list comprehension

import glob

mylist = [f for f in glob.glob("*.txt")]

Ottenere il nome completo del percorso con os.path.abspath

Come hai notato, non hai il percorso completo del file nel codice sopra. Se hai bisogno di avere il percorso assoluto, puoi usare un'altra funzione del modulo os.path chiamato _getfullpathname, mettendo il file che ottieni da os.listdir() come argomento. Ci sono altri modi per avere il percorso completo, come vedremo in seguito (ho sostituito, come suggerito da mexmex, _getfullpathname con abspath).

>>> import os
>>> files_path = [os.path.abspath(x) for x in os.listdir()]
>>> files_path
['F:\\documenti\applications.txt', 'F:\\documenti\collections.txt']

Ottieni il nome completo del percorso di un tipo di file in tutte le sottodirectory con walk

Lo trovo molto utile per trovare cose in molte directory e mi ha aiutato a trovare un file su cui non ricordavo il nome:

import os

# Getting the current work directory (cwd)
thisdir = os.getcwd()

# r=root, d=directories, f = files
for r, d, f in os.walk(thisdir):
    for file in f:
        if ".docx" in file:
            print(os.path.join(r, file))

os.listdir (): recupera i file nella directory corrente (Python 2)

In Python 2 tu, se vuoi la lista dei file nella directory corrente, devi dare l'argomento come '.' o os.getcwd () nel metodo os.listdir.

>>> import os
>>> arr = os.listdir('.')
>>> arr
['$RECYCLE.BIN', 'work.txt', '3ebooks.txt', 'documents']

Per salire nell'albero delle directory

>>> # Method 1
>>> x = os.listdir('..')

# Method 2
>>> x= os.listdir('/')

Ottieni file: os.listdir () in una particolare directory (Python 2 e 3)

>>> import os
>>> arr = os.listdir('F:\\python')
>>> arr
['$RECYCLE.BIN', 'work.txt', '3ebooks.txt', 'documents']

Ottieni i file di una particolare sottodirectory con os.listdir ()

import os

x = os.listdir("./content")

os.walk ('.') - directory corrente

>>> import os
>>> arr = next(os.walk('.'))[2]
>>> arr
['5bs_Turismo1.pdf', '5bs_Turismo1.pptx', 'esperienza.txt']

modulo glob: tutti i file

import glob
print(glob.glob("*"))

out:['content', 'start.py']

next (os.walk ('.')) e os.path.join ('dir', 'file')

>>> import os
>>> arr = []
>>> for d,r,f in next(os.walk("F:\_python")):
>>>     for file in f:
>>>         arr.append(os.path.join(r,file))
...
>>> for f in arr:
>>>     print(files)

>output

F:\\_python\\dict_class.py
F:\\_python\\programmi.txt

next (os.walk ('F: \') - ottieni il percorso completo - la comprensione degli elenchi

>>> [os.path.join(r,file) for r,d,f in next(os.walk("F:\\_python")) for file in f]
['F:\\_python\\dict_class.py', 'F:\\_python\\programmi.txt']

os.walk - get full path - tutti i file in sub dir

x = [os.path.join(r,file) for r,d,f in os.walk("F:\\_python") for file in f]

>>>x
['F:\\_python\\dict.py', 'F:\\_python\\progr.txt', 'F:\\_python\\readl.py']

os.listdir () - ottiene solo i file txt

>>> arr_txt = [x for x in os.listdir() if x.endswith(".txt")]
>>> print(arr_txt)
['work.txt', '3ebooks.txt']

glob - ottieni solo file txt

>>> import glob
>>> x = glob.glob("*.txt")
>>> x
['ale.txt', 'alunni2015.txt', 'assenze.text.txt', 'text2.txt', 'untitled.txt']

Usare glob per ottenere il percorso completo dei file

Se dovrei avere bisogno del percorso assoluto dei file:

>>> from path import path
>>> from glob import glob
>>> x = [path(f).abspath() for f in glob("F:\*.txt")]
>>> for f in x:
...  print(f)
...
F:\acquistionline.txt
F:\acquisti_2018.txt
F:\bootstrap_jquery_ecc.txt

Altro uso di glob

Se voglio tutti i file nella directory:

>>> x = glob.glob("*")

Utilizzando os.path.isfile per evitare le directory nell'elenco

import os.path
listOfFiles = [f for f in os.listdir() if os.path.isfile(f)]
print(listOfFiles)

> output

['a simple game.py', 'data.txt', 'decorator.py']

Usare pathlib da (Python 3.4)

import pathlib

>>> flist = []
>>> for p in pathlib.Path('.').iterdir():
...  if p.is_file():
...   print(p)
...   flist.append(p)
...
error.PNG
exemaker.bat
guiprova.mp3
setup.py
speak_gui2.py
thumb.PNG

Se vuoi usare la comprensione delle liste

>>> flist = [p for p in pathlib.Path('.').iterdir() if p.is_file()]

* Puoi anche usare solo pathlib.Path () invece di pathlib.Path (".")

Usa il metodo glob in pathlib.Path ()

import pathlib

py = pathlib.Path().glob("*.py")
for file in py:
    print(file)

produzione:

stack_overflow_list.py
stack_overflow_list_tkinter.py

Ottieni tutti e solo i file con os.walk

import os
x = [i[2] for i in os.walk('.')]
y=[]
for t in x:
    for f in t:
        y.append(f)

>>> y
['append_to_list.py', 'data.txt', 'data1.txt', 'data2.txt', 'data_180617', 'os_walk.py', 'READ2.py', 'read_data.py', 'somma_defaltdic.py', 'substitute_words.py', 'sum_data.py', 'data.txt', 'data1.txt', 'data_180617']

Ottieni solo i file con successivo e cammina in una directory

>>> import os
>>> x = next(os.walk('F://python'))[2]
>>> x
['calculator.bat','calculator.py']

Ottieni solo le directory con next e cammina in una directory

>>> import os
>>> next(os.walk('F://python'))[1] # for the current dir use ('.')
['python3','others']

Ottieni tutti i nomi delle sottodirectory con walk

>>> for r,d,f in os.walk("F:\_python"):
...  for dirs in d:
...   print(dirs)
...
.vscode
pyexcel
pyschool.py
subtitles
_metaprogramming
.ipynb_checkpoints

os.scandir () da Python 3.5 su

>>> import os
>>> x = [f.name for f in os.scandir() if f.is_file()]
>>> x
['calculator.bat','calculator.py']

# Another example with scandir (a little variation from docs.python.org)
# This one is more efficient than os.listdir.
# In this case, it shows the files only in the current directory
# where the script is executed.

>>> import os
>>> with os.scandir() as i:
...  for entry in i:
...   if entry.is_file():
...    print(entry.name)
...
ebookmaker.py
error.PNG
exemaker.bat
guiprova.mp3
setup.py
speakgui4.py
speak_gui2.py
speak_gui3.py
thumb.PNG
>>>

Ex. 1: Quanti file ci sono nelle sottodirectory?

In questo esempio, cerchiamo il numero di file che sono inclusi in tutta la directory e nelle sue sottodirectory.

import os

def count(dir, counter=0):
    "returns number of files in dir and subdirs"
    for pack in os.walk(dir):
        for f in pack[2]:
            counter += 1
    return dir + " : " + str(counter) + "files"

print(count("F:\\python"))

> output

>'F:\\\python' : 12057 files'

Ex.2: Come copiare tutti i file da una directory a un'altra?

Uno script per fare ordine nel tuo computer trovando tutti i file di un tipo (predefinito: pptx) e copiandoli in una nuova cartella.

import os
import shutil
from path import path

destination = "F:\\file_copied"
# os.makedirs(destination)

def copyfile(dir, filetype='pptx', counter=0):
    "Searches for pptx (or other - pptx is the default) files and copies them"
    for pack in os.walk(dir):
        for f in pack[2]:
            if f.endswith(filetype):
                fullpath = pack[0] + "\\" + f
                print(fullpath)
                shutil.copy(fullpath, destination)
                counter += 1
    if counter > 0:
        print("------------------------")
        print("\t==> Found in: `" + dir + "` : " + str(counter) + " files\n")

for dir in os.listdir():
    "searches for folders that starts with `_`"
    if dir[0] == '_':
        # copyfile(dir, filetype='pdf')
        copyfile(dir, filetype='txt')


> Output

_compiti18\Compito Contabilità 1\conti.txt
_compiti18\Compito Contabilità 1\modula4.txt
_compiti18\Compito Contabilità 1\moduloa4.txt
------------------------
==> Found in: `_compiti18` : 3 files

Ex. 3: Come ottenere tutti i file in un file txt

Nel caso in cui desideri creare un file txt con tutti i nomi di file:

import os
mylist = ""
with open("filelist.txt", "w", encoding="utf-8") as file:
    for eachfile in os.listdir():
        mylist += eachfile + "\n"
    file.write(mylist)

Esempio: txt con tutti i file di un disco rigido

"""We are going to save a txt file with all the files in your directory.
We will use the function walk()

"""

import os

# see all the methods of os
# print(*dir(os), sep=", ")
listafile = []
percorso = []
with open("lista_file.txt", "w", encoding='utf-8') as testo:
    for root, dirs, files in os.walk("D:\\"):
        for file in files:
            listafile.append(file)
            percorso.append(root + "\\" + file)
            testo.write(file + "\n")
listafile.sort()
print("N. of files", len(listafile))
with open("lista_file_ordinata.txt", "w", encoding="utf-8") as testo_ordinato:
    for file in listafile:
        testo_ordinato.write(file + "\n")

with open("percorso.txt", "w", encoding="utf-8") as file_percorso:
    for file in percorso:
        file_percorso.write(file + "\n")

os.system("lista_file.txt")
os.system("lista_file_ordinata.txt")
os.system("percorso.txt")

Tutto il file di C: \\ in un file di testo

Questa è una versione più breve del codice precedente. Cambiare la cartella in cui iniziare a cercare i file se è necessario iniziare da un'altra posizione. Questo codice genera 50 mb su file di testo sul mio computer con qualcosa di meno di 500.000 righe con file con il percorso completo.

import os

with open("file.txt", "w", encoding="utf-8") as filewrite:
    for r, d, f in os.walk("C:\\"):
        for file in f:
            filewrite.write(f"{r + file}\n")    

Una funzione per cercare un certo tipo di file

import os

def searchfiles(extension='.ttf'):
    "Create a txt file with all the file of a type"
    with open("file.txt", "w", encoding="utf-8") as filewrite:
        for r, d, f in os.walk("C:\\"):
            for file in f:
                if file.endswith(extension):
                    filewrite.write(f"{r + file}\n")

# looking for ttf file (fonts)
searchfiles('ttf')
489
Giovanni Gianni

Una soluzione a una riga per ottenere solo l'elenco dei file (nessuna sottodirectory):

filenames = next(os.walk(path))[2]

o percorsi assoluti:

paths = [os.path.join(path,fn) for fn in next(os.walk(path))[2]]
149
Remi

Ottenere percorsi di file completi da una directory e da tutte le sue sottodirectory

import os

def get_filepaths(directory):
    """
    This function will generate the file names in a directory 
    tree by walking the tree either top-down or bottom-up. For each 
    directory in the tree rooted at directory top (including top itself), 
    it yields a 3-Tuple (dirpath, dirnames, filenames).
    """
    file_paths = []  # List which will store all of the full filepaths.

    # Walk the tree.
    for root, directories, files in os.walk(directory):
        for filename in files:
            # Join the two strings in order to form the full filepath.
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)  # Add it to the list.

    return file_paths  # Self-explanatory.

# Run the above function and store its results in a variable.   
full_file_paths = get_filepaths("/Users/johnny/Desktop/TEST")

  • Il percorso che ho fornito nella funzione precedente conteneva 3 file, due dei quali nella directory root e un altro in una sottocartella chiamata "SUBFOLDER". Ora puoi fare cose come:
  • print full_file_paths che stamperà la lista:

    • ['/Users/johnny/Desktop/TEST/file1.txt', '/Users/johnny/Desktop/TEST/file2.txt', '/Users/johnny/Desktop/TEST/SUBFOLDER/file3.dat']

Se lo desideri, puoi aprire e leggere il contenuto oppure concentrarti solo sui file con estensione ".dat" come nel seguente codice:

for f in full_file_paths:
  if f.endswith(".dat"):
    print f

/Users/johnny/Desktop/TEST/SUBFOLDER/file3.dat

117
Johnny

Dalla versione 3.4 ci sono builtin iterators per questo che sono molto più efficienti di os.listdir() :

pathlib : Novità nella versione 3.4.

>>> import pathlib
>>> [p for p in pathlib.Path('.').iterdir() if p.is_file()]

Secondo PEP 428 , lo scopo della pathlib library è di fornire una semplice gerarchia di classi per gestire i percorsi del filesystem e le operazioni comuni che gli utenti eseguono su di essi.

os.scandir() : Novità nella versione 3.5.

>>> import os
>>> [entry for entry in os.scandir('.') if entry.is_file()]

Si noti che os.walk() uses os.scandir() invece di os.listdir() dalla versione 3.5, e la sua velocità è aumentata di 2-20 volte secondo PEP 471 .

Consentitemi anche di leggere il commento di ShadowRanger qui sotto.

70
SzieberthAdam

Mi è veramente piaciuto la risposta di adamk , suggerendo che tu usi glob(), dal modulo con lo stesso nome. Questo ti permette di avere pattern matching con *s.

Ma come hanno sottolineato altre persone nei commenti, glob() può essere inciampata in direzioni discordanti incoerenti. Per aiutarti, ti suggerisco di utilizzare le funzioni join() e expanduser() nel modulo os.path, e forse anche la funzione getcwd() nel modulo os.

Come esempi:

from glob import glob

# Return everything under C:\Users\admin that contains a folder called wlp.
glob('C:\Users\admin\*\wlp')

Quanto sopra è terribile: il percorso è stato hardcoded e funzionerà solo su Windows solo tra il nome dell'unità e \s che è stato codificato nel percorso.

from glob    import glob
from os.path import join

# Return everything under Users, admin, that contains a folder called wlp.
glob(join('Users', 'admin', '*', 'wlp'))

Quanto sopra funziona meglio, ma si basa sul nome della cartella Users che si trova spesso su Windows e non così spesso trovato su altri sistemi operativi. Si basa anche sull'utente che ha un nome specifico, admin.

from glob    import glob
from os.path import expanduser, join

# Return everything under the user directory that contains a folder called wlp.
glob(join(expanduser('~'), '*', 'wlp'))

Funziona perfettamente su tutte le piattaforme.

Un altro grande esempio che funziona perfettamente su piattaforme e fa qualcosa di un po 'diverso:

from glob    import glob
from os      import getcwd
from os.path import join

# Return everything under the current directory that contains a folder called wlp.
glob(join(getcwd(), '*', 'wlp'))

Spero che questi esempi ti aiutino a vedere il potere di alcune delle funzioni che puoi trovare nei moduli della libreria Python standard.

47
ArtOfWarfare
def list_files(path):
    # returns a list of names (with extension, without full path) of all files 
    # in folder path
    files = []
    for name in os.listdir(path):
        if os.path.isfile(os.path.join(path, name)):
            files.append(name)
    return files 
34
Apogentus

Se stai cercando un'implementazione Python di find , questa è una ricetta che uso piuttosto frequentemente:

from findtools.find_files import (find_files, Match)

# Recursively find all *.sh files in **/usr/bin**
sh_files_pattern = Match(filetype='f', name='*.sh')
found_files = find_files(path='/usr/bin', match=sh_files_pattern)

for found_file in found_files:
    print found_file

Così ho creato un PyPI package out e c'è anche un repository GitHub . Spero che qualcuno lo trovi potenzialmente utile per questo codice.

22

Restituire un elenco di percorsi file assoluti, non ricorre nelle sottodirectory

L = [os.path.join(os.getcwd(),f) for f in os.listdir('.') if os.path.isfile(os.path.join(os.getcwd(),f))]
12
The2ndSon

Per ottenere risultati migliori, puoi utilizzare il metodo listdir() del modulo os insieme a un generatore (un generatore è un potente iteratore che mantiene il suo stato, ricordi?). Il seguente codice funziona bene con entrambe le versioni: Python 2 e Python 3.

Ecco un codice:

import os

def files(path):  
    for file in os.listdir(path):
        if os.path.isfile(os.path.join(path, file)):
            yield file

for file in files("."):  
    print (file)

Il metodo listdir() restituisce l'elenco delle voci per la directory specificata. Il metodo os.path.isfile() restituisce True se la voce data è un file. E l'operatore yield chiude la funzione ma mantiene il suo stato corrente e restituisce solo il nome della voce rilevata come file. Tutto quanto sopra ci consente di eseguire il looping della funzione del generatore.

Spero che questo ti aiuti.

10
ARGeo
import os
import os.path


def get_files(target_dir):
    item_list = os.listdir(target_dir)

    file_list = list()
    for item in item_list:
        item_dir = os.path.join(target_dir,item)
        if os.path.isdir(item_dir):
            file_list += get_files(item_dir)
        else:
            file_list.append(item_dir)
    return file_list

Qui uso una struttura ricorsiva.

9
pah8J

Suppongo che tutti i tuoi file siano di formato *.txt e siano memorizzati in una directory con il percorso data/.

Si può usare glob module of python per elencare tutti i file della directory e aggiungerli a una lista chiamata fnames, nel modo seguente:

import glob

fnames = glob.glob("data/*.txt")  #fnames: list data type
9

Un insegnante saggio mi ha detto una volta che:

Quando ci sono diversi modi per fare qualcosa, nessuno di questi è buono per tutti i casi.

Aggiungerò quindi una soluzione per un sottoinsieme del problema: molto spesso, vogliamo solo verificare se un file corrisponde a una stringa iniziale e una stringa finale, senza entrare nelle sottodirectory. Vorremmo quindi una funzione che restituisca una lista di nomi di file, come:

filenames = dir_filter('foo/baz', radical='radical', extension='.txt')

Se ti interessa prima dichiarare due funzioni, questo può essere fatto:

def file_filter(filename, radical='', extension=''):
    "Check if a filename matches a radical and extension"
    if not filename:
        return False
    filename = filename.strip()
    return(filename.startswith(radical) and filename.endswith(extension))

def dir_filter(dirname='', radical='', extension=''):
    "Filter filenames in directory according to radical and extension"
    if not dirname:
        dirname = '.'
    return [filename for filename in os.listdir(dirname)
                if file_filter(filename, radical, extension)]

Questa soluzione potrebbe essere facilmente generalizzata con espressioni regolari (e potresti voler aggiungere un argomento pattern, se non vuoi che i tuoi pattern si attengano sempre all'inizio o alla fine del nome del file).

7
fralau

Usare i generatori

import os
def get_files(search_path):
     for (dirpath, _, filenames) in os.walk(search_path):
         for filename in filenames:
             yield os.path.join(dirpath, filename)
list_files = get_files('.')
for filename in list_files:
    print(filename)
5
shantanoo

È possibile utilizzare questo codice per ottenere iteratore che esegue tutto il percorso completo dei file (directory + nome file).

import os

def get_iterator_all_files_name(dir_path):
    for (dirpath, dirnames, filenames) in os.walk(dir_path):
        for f in filenames:
            yield os.path.join(dirpath, f)

O usalo, per averlo nella lista.

import os

def get_list_all_files_name(dir_path):
    all_files_path = []

    for (dirpath, dirnames, filenames) in os.walk(dir_path):
        for f in filenames:
            all_files_path.append(os.path.join(dirpath, f))

    return all_files_path
5
yehuda corsia
# -** coding: utf-8 -*-
import os
import traceback

print '\n\n'

def start():
    address = "/home/ubuntu/Desktop"
    try:
        Folders = []
        Id = 1
        for item in os.listdir(address):
            endaddress = address + "/" + item
            Folders.append({'Id': Id, 'TopId': 0, 'Name': item, 'Address': endaddress })
            Id += 1         

            state = 0
            for item2 in os.listdir(endaddress):
                state = 1
            if state == 1: 
                Id = FolderToList(endaddress, Id, Id - 1, Folders)
        return Folders
    except:
        print "___________________________ ERROR ___________________________\n" + traceback.format_exc()

def FolderToList(address, Id, TopId, Folders):
    for item in os.listdir(address):
        endaddress = address + "/" + item
        Folders.append({'Id': Id, 'TopId': TopId, 'Name': item, 'Address': endaddress })
        Id += 1

        state = 0
        for item in os.listdir(endaddress):
            state = 1
        if state == 1: 
            Id = FolderToList(endaddress, Id, Id - 1, Folders)
    return Id

print start()
5
barisim.net

Utilizzare questa funzione se si desidera utilizzare un tipo di file diverso o ottenere la directory completa:

import os

def createList(foldername, fulldir = True, suffix=".jpg"):
    file_list_tmp = os.listdir(foldername)
    #print len(file_list_tmp)
    file_list = []
    if fulldir:
        for item in file_list_tmp:
            if item.endswith(suffix):
                file_list.append(os.path.join(foldername, item))
    else:
        for item in file_list_tmp:
            if item.endswith(suffix):
                file_list.append(item)
    return file_list
3
neouyghur

Un'altra variante molto leggibile per Python 3.4+ sta usando pathlib.Path.glob:

from pathlib import Path
folder = '/foo'
[f for f in Path(folder).glob('*') if f.is_file()]

È semplice rendere più specifico, ad es. cerca solo i file di origine Python che non sono link simbolici, anche in tutte le sottodirectory:

[f for f in Path(folder).glob('**/*.py') if not f.is_symlink()]
3
fhchl
import dircache
list = dircache.listdir(pathname)
i = 0
check = len(list[0])
temp = []
count = len(list)
while count != 0:
  if len(list[i]) != check:
     temp.append(list[i-1])
     check = len(list[i])
  else:
    i = i + 1
    count = count - 1

print temp
2
shaji

Ecco la mia funzione generale per questo. Restituisce un elenco di percorsi di file anziché di nomi di file poiché ho trovato che sia più utile. Ha alcuni argomenti opzionali che lo rendono versatile. Ad esempio, lo uso spesso con argomenti come pattern='*.txt' o subfolders=True.

import os
import fnmatch

def list_paths(folder='.', pattern='*', case_sensitive=False, subfolders=False):
    """Return a list of the file paths matching the pattern in the specified 
    folder, optionally including files inside subfolders.
    """
    match = fnmatch.fnmatchcase if case_sensitive else fnmatch.fnmatch
    walked = os.walk(folder) if subfolders else [next(os.walk(folder))]
    return [os.path.join(root, f)
            for root, dirnames, filenames in walked
            for f in filenames if match(f, pattern)]
2
MarredCheese

Per python2: pip install rglob

import rglob
file_list=rglob.rglob("/home/base/dir/", "*")
print file_list
1
chris-piekarski

Fornirò un campione di un liner in cui sia possibile fornire come input il tipo di file e di sourcepath. Il codice restituisce un elenco di nomi di file con estensione csv. Uso . nel caso in cui tutti i file devono essere restituiti. Questo scriverà anche in modo ricorsivo le sottodirectory.

[y for x in os.walk(sourcePath) for y in glob(os.path.join(x[0], '*.csv'))]

Modifica le estensioni di file e il percorso di origine secondo necessità.

0