it-swarm-tr.com

Bir dizinin tamamı nasıl listeleyebilirim?

Bir dizinin tüm dosyalarını Python'da nasıl listeleyebilir ve onları bir list dosyasına nasıl ekleyebilirim?

3472
duhhunjonn

os.listdir() , bir dizindeki her şeyi alır - dosyalar ve dizinler.

Eğer just files istiyorsanız, os.path : kullanarak bunu filtreleyebilirsiniz.

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

veya os.walk() 'ı kullanabilir, bu da ziyaret ettiği her dizin için iki liste verir - sizin için dosya ve dizinlere bölme. Eğer sadece en üstteki dizini istiyorsan, ilk getirdiği zamanı kırabilirsin.

from os import walk

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

Son olarak, bu örnekte gösterildiği gibi, bir listeyi diğerine eklemek, .extend() veya

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

Şahsen ben .extend() tercih ederim

3380
pycruft

Desen eşleştirme ve genişletme işlevini yaptığı gibi glob modülünü kullanmayı tercih ederim.

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

Sorgulanan dosyaları içeren bir liste döndürür:

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

"somedirectory" deki tüm dosya ve dizinlerin bir listesini döndürecektir.

645
sepp2k

Python 2 ve 3 ile dosyaların listesini alın


Ayrıca burada kısa bir video yaptım:   Python: Bir dizindeki dosyanın listesi nasıl alınır


os.listdir ()

veya ..... geçerli dizindeki tüm dosyaları (ve dizinleri) alma (Python 3)

Dosyanın Python 3'deki geçerli dizinde bulunmasının en basit yolu budur. Bu gerçekten basit; os modülünü ve listdir() işlevini kullanın; dosyayı bu dizinde (ve dizinde olan nihai klasörlerde olacak) ancak alt dizinde dosyayı kullanmayacaksınız, bunun için yürüyüşü kullanabilirsiniz - hakkında konuşacağım. daha sonra).

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

glob kullanımı

Aynı türden veya ortak bir şeyle dosyayı seçmek için glob'u daha kolay buldum. Şu örneğe bakın:

import glob

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

Liste kavrama kullanma

import glob

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

Os.path.abspath ile tam yol adını alma

Fark ettiğiniz gibi, yukarıdaki kodda dosyanın tam yolunu bilmiyorsunuz. Mutlak bir yola sahip olmanız gerekiyorsa, os.path modülünün _getfullpathname adlı başka bir işlevini kullanarak, os.listdir() dosyasından aldığınız dosyayı bir argüman olarak kullanabilirsiniz. Daha sonra kontrol edeceğimiz gibi tam yolu elde etmenin başka yolları da var (Ben, mexmex'in önerdiği gibi, _getfullpathname abspath ile değiştirdim).

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

Bir dosya türünün tam yol adını walk ile tüm alt dizinlere alın

Bunu pek çok dizinde bir şeyler bulmak için çok faydalı buluyorum ve adı hatırlamadığım bir dosyayı bulmama yardımcı oldu:

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 (): geçerli dizindeki dosyaları al (Python 2)

Python 2'de, geçerli dizindeki dosyaların listesini görmek istiyorsanız, argümanı '.' veya os.listdir yönteminde os.getcwd ().

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

Rehber ağacında yukarı çıkmak için

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

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

Dosyaları al: os.listdir () belirli bir dizinde (Python 2 ve 3)

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

Os.listdir () ile belirli bir alt dizinin dosyalarını alın

import os

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

os.walk ('.') - geçerli dizin

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

glob module - tüm dosyalar

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

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

next (os.walk ('.')) ve 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: \') - tam yolunu göster - liste anlama

>>> [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 - tam yol - alt dizinlerdeki tüm dosyalar

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 () - sadece txt dosyalarını al

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

glob - sadece txt dosyalarını al

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

Dosyaların tam yolunu bulmak için glob kullanma

Dosyaların mutlak yoluna ihtiyacım olursa:

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

Glob diğer kullanım

Dizindeki tüm dosyaları istiyorsam:

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

Listedeki dizinleri önlemek için os.path.isfile komutunu kullanmak

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']

Pathlib'i kullanarak (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

Eğer liste kavrama kullanmak istiyorsanız

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

* Ayrıca, pathlib.Path (".") Yerine sadece pathlib.Path () yöntemini kullanabilirsiniz.

Pathlib.Path () işlevinde glob yöntemini kullanın.

import pathlib

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

çıktı:

stack_overflow_list.py
stack_overflow_list_tkinter.py

Os.walk ile tüm ve sadece dosyaları al

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']

Yalnızca sonraki dosyaları al ve bir dizine yürü

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

Sadece sonraki dizinleri alın ve bir dizine gidin

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

Tüm alt dizin adlarını walk ile al

>>> 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 () Python 3.5

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

Ör. 1: Alt dizinlerde kaç dosya var?

Bu örnekte, tüm dizinde ve alt dizinlerinde bulunan dosya sayısını ararız.

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'

Örnek 2: Tüm dosyalar bir dizinden diğerine nasıl kopyalanır?

Bilgisayarınızda bir türdeki tüm dosyaları bulma (varsayılan: pptx) ve bunları yeni bir klasöre kopyalayan bir komut dosyası.

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

Ör. 3: Bir txt dosyasındaki tüm dosyalar nasıl elde edilir

Tüm dosya adlarıyla bir txt dosyası oluşturmak istemeniz durumunda:

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

Örnek: Bir sabit sürücünün tüm dosyaları ile txt

"""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")

C: \\ 'nin tüm dosyaları tek bir metin dosyasında

Bu önceki kodun daha kısa bir sürümüdür. Başka bir konumdan başlamanız gerekirse, dosyaları bulmaya başlayacağınız klasörü değiştirin. Bu kod, bilgisayarımdaki metin dosyasında 50 mb'lik bir dosya oluşturur ve 500.000 satırdan daha kısa bir sürede tam yollu dosyalar oluşturur.

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")    

Belirli bir dosya türünü arama işlevi

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

Yalnızca dosyaların listesini almak için tek satırlık bir çözüm (alt dizin yok):

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

veya mutlak yol adları:

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

Bir Dizinden ve Tüm Alt Dizinlerinden Tam Dosya Yollarını Alma

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")

  • Yukarıdaki fonksiyonda sağladığım yol 3 dosya içeriyordu - ikisi kök dizinde, diğeri ise "SUBFOLDER" adında bir alt klasörde. Şimdi gibi şeyler yapabilirsiniz:
  • Listeyi yazdıracak print full_file_paths:

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

İsterseniz, içeriği açıp okuyabilir veya yalnızca aşağıdaki koddaki gibi ".dat" uzantılı dosyalara odaklanabilirsiniz:

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

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

117
Johnny

3.4 sürümünden beri, yineleyiciler bunun için os.listdir() öğesinden çok daha verimli olan:

pathlib : 3.4 sürümünde yeni.

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

PEP 428 ifadesine göre, pathlib kütüphanesinin amacı, dosya sistemi yollarını ve kullanıcıların üzerinde yaptıkları ortak işlemleri yönetmek için basit bir sınıf hiyerarşisi sağlamaktır.

os.scandir() : 3.5 sürümünde yeni.

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

3.5 sürümünden os.walk() , 3.5 sürümünden os.scandir() yerine os.listdir() kullandığını ve hızının PEP 471 değerine göre 2-20 kat arttığını unutmayın. .

Ayrıca, ShadowRanger'in yorumunu aşağıda okumanı tavsiye edeyim.

70
SzieberthAdam

Aynı adı taşıyan modülden, glob() işlevini kullanmanızı önererek, adamk'ın cevabı kodunu gerçekten sevdim. Bu, *s ile kalıp eşleştirmenize izin verir.

Ancak yorumlarda başkalarının da belirttiği gibi, glob(), tutarsız eğik yönlere takılabilir. Bunun için, os.path modülünde join() ve expanduser() işlevlerini ve ayrıca os modülünde getcwd() işlevini kullanmanızı öneririm.

Örnek olarak:

from glob import glob

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

Yukarıdakiler korkunç - yol kodlanmış ve yalnızca Windows'ta sürücü adı ile yolun içine kodlanan \s arasında çalışacak.

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'))

Yukarıdakiler daha iyi çalışır, ancak genellikle Windows'ta bulunan ve diğer işletim sistemlerinde bu kadar sık ​​bulunmayan Users klasör adına dayanır. Ayrıca, admin olan belirli bir adı olan kullanıcıya dayanır.

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'))

Bu, tüm platformlarda mükemmel çalışır.

Platformlarda mükemmel çalışan ve biraz farklı bir şey yapan başka bir harika örnek:

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'))

Umarım bu örnekler standart Python kütüphane modüllerinde bulabileceğiniz bazı fonksiyonların gücünü görmenize yardımcı olur.

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

find 'nin Python uygulamasını arıyorsanız, bu oldukça sık kullandığım bir reçetedir:

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

Böylece bir PyPI paketi yaptım ve ayrıca bir GitHub deposu . Umarım birileri bu kod için potansiyel olarak yararlı bulur.

22

Mutlak dosya dosyalarının bir listesini döndürmek, alt dizinlere tekrar edilmez

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

Daha iyi sonuçlar için, bir değişkenle birlikte os modülünün listdir() yöntemini kullanabilirsiniz (bir jeneratör durumunu koruyan güçlü bir yineleyicidir, hatırladın mı?). Aşağıdaki kod her iki sürümde de iyi çalışır: Python 2 ve Python 3.

İşte bir kod:

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)

listdir() yöntemi, verilen dizine ilişkin girişlerin listesini döndürür. Verilen giriş bir dosya ise os.path.isfile() yöntemi True değerini döndürür. yield operatörü func komutundan çıkar ancak geçerli durumunu korur ve yalnızca dosya olarak algılanan girişin adını döndürür. Yukarıdakilerin tümü, jeneratör işlevi üzerinde döngü yapmamıza izin verir.

Bu yardımcı olur umarım.

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

Burada özyinelemeli bir yapı kullanıyorum.

9
pah8J

Tüm dosyalarınızın *.txt biçiminde olduğunu ve data/ yolunu içeren bir dizinde depolandığını varsayıyorum.

Biri dizinin tüm dosyalarını listelemek için globpython modülünü kullanabilir ve onları fnames adlı bir listeye aşağıdaki şekilde ekleyebilir:

import glob

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

Bilge bir öğretmen bana şöyle dedi:

Bir şeyi yapmanın birkaç yolu vardır, hiçbiri tüm durumlar için iyi değildir.

Böylece problemin bir subset 'sine bir çözüm ekleyeceğim: sık sık, bir dosyanın sadece alt dizinlere girmeden bir başlangıç ​​dizesiyle ve bir bitiş dizgisiyle eşleşip eşleşmediğini kontrol etmek istiyoruz. Böylece şöyle bir dosya listesi döndüren bir işlev istiyoruz:

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

Önce iki işlevi bildirmek istiyorsanız, bu yapılabilir:

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)]

Bu çözüm düzenli ifadelerle kolayca genelleştirilebilir (ve kalıplarınızın her zaman dosya adının başına veya sonuna yapışmasını istemiyorsanız pattern argümanı eklemek isteyebilirsiniz).

7
fralau

Jeneratörleri kullanarak

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

Tüm dosya yolunda çalışan dizinleri almak için bu kodu kullanabilirsiniz (Dizinler + dosya adı).

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)

Ya da listeden almak için kullanın.

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

Farklı bir dosya türü kullanmak veya tam dizini almak istiyorsanız bu işlevi kullanın:

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

Python 3.4+ için okunabilir bir başka değişken pathlib.Path.glob kullanıyor:

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

Örneğin, daha spesifik hale getirmek basittir. sadece tüm alt dizinlerde sembolik link içermeyen Python kaynak dosyalarını arayın:

[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

İşte bunun için genel amaçlı fonksiyonum. Bunu daha yararlı bulduğum için dosya adları yerine dosya yollarının bir listesini döndürür. Çok yönlü kılan isteğe bağlı birkaç argüman var. Örneğin, sıklıkla pattern='*.txt' veya subfolders=True gibi argümanlarla kullanırım.

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

Python2 için: pip rglob'u kurun

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

Sourcepath ve dosya türünün girdi olarak sağlanabileceği bir örnek liner sunacağım. Kod, csv uzantılı dosya adlarının bir listesini döndürür. kullanın. Tüm dosyaların iade edilmesi gerektiğinde. Bu ayrıca alt dizinleri tekrar tekrar tarar.

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

Dosya uzantılarını ve kaynak yolunu gerektiği gibi değiştirin.

0