Frage Suchen Sie alle Dateien in einem Verzeichnis mit der Erweiterung .txt in Python


Wie kann ich alle Dateien in einem Verzeichnis mit der Erweiterung finden? .txt in Python?


1044
2017-10-19 01:09


Ursprung


Antworten:


Sie können verwenden glob:

import glob, os
os.chdir("/mydir")
for file in glob.glob("*.txt"):
    print(file)

oder einfach os.listdir:

import os
for file in os.listdir("/mydir"):
    if file.endswith(".txt"):
        print(os.path.join("/mydir", file))

oder wenn Sie ein Verzeichnis durchsuchen möchten, verwenden Sie os.walk:

import os
for root, dirs, files in os.walk("/mydir"):
    for file in files:
        if file.endswith(".txt"):
             print(os.path.join(root, file))

1652
2017-10-19 01:12



Benutzen glob.

>>> import glob
>>> glob.glob('./*.txt')
['./outline.txt', './pip-log.txt', './test.txt', './testingvim.txt']

180
2017-10-19 01:11



So etwas sollte den Job machen

for root, dirs, files in os.walk(directory):
    for file in files:
        if file.endswith('.txt'):
            print file

115
2017-10-19 01:11



So etwas wird funktionieren:

>>> import os
>>> path = '/usr/share/cups/charmaps'
>>> text_files = [f for f in os.listdir(path) if f.endswith('.txt')]
>>> text_files
['euc-cn.txt', 'euc-jp.txt', 'euc-kr.txt', 'euc-tw.txt', ... 'windows-950.txt']

88
2017-10-19 01:13



ich mag os.walk ():

import os, os.path

for root, dirs, files in os.walk(dir):
    for f in files:
        fullpath = os.path.join(root, f)
        if os.path.splitext(fullpath)[1] == '.txt':
            print fullpath

Oder mit Generatoren:

import os, os.path

fileiter = (os.path.join(root, f)
    for root, _, files in os.walk(dir)
    for f in files)
txtfileiter = (f for f in fileiter if os.path.splitext(f)[1] == '.txt')
for txt in txtfileiter:
    print txt

25
2017-10-19 01:27



import os

path = 'mypath/path' 
files = os.listdir(path)

files_txt = [i for i in files if i.endswith('.txt')]

24
2017-07-14 18:29



Hier sind weitere Versionen derselben, die leicht unterschiedliche Ergebnisse liefern:

glob.iglob ()

import glob
for f in glob.iglob("/mydir/*/*.txt"): # generator, search immediate subdirectories 
    print f

glob.glob1 ()

print glob.glob1("/mydir", "*.tx?")  # literal_directory, basename_pattern

fnmatch.filter ()

import fnmatch, os
print fnmatch.filter(os.listdir("/mydir"), "*.tx?") # include dot-files

21
2017-10-19 18:41



path.py ist eine weitere Alternative: https://github.com/jaraco/path.py

from path import path
p = path('/path/to/the/directory')
for f in p.files(pattern='*.txt'):
    print f

17
2017-12-22 08:47



Python hat alle Werkzeuge, um dies zu tun:

import os

the_dir = 'the_dir_that_want_to_search_in'
all_txt_files = filter(lambda x: x.endswith('.txt'), os.listdir(the_dir))

10
2017-08-30 06:51