Python-da dizinlərin siyahısı

Python-da müəyyən bir kataloqdakı bütün faylların (və qovluqların) siyahısını necə əldə etmək olar?

518
23 сент. Matt 23 sentyabrda yaradılmışdır . 2008-09-23 15:28 '08 at 15:28 2008-09-23 15:28
ответ 21 cavab

Dizin ağacında hər bir fayl və qovluğu taşımanın yolu:

 import os for dirname, dirnames, filenames in os.walk('.'): # print path to all subdirectories first. for subdirname in dirnames: print(os.path.join(dirname, subdirname)) # print path to all filenames. for filename in filenames: print(os.path.join(dirname, filename)) # Advanced usage: # editing the 'dirnames' list will stop os.walk() from recursing into there. if '.git' in dirnames: # don't go into any .git directories. dirnames.remove('.git') 
581
23 сент. cavab Jerub 23 Sentyabr verilir. 2008-09-23 15:35 '08 saat 15:35 'də 2008-09-23 15:35' da

Siz istifadə edə bilərsiniz

 os.listdir(path) 
border=0

Kömək və digər OS funksiyaları üçün buraya baxın:

501
23 сент. Cavab verilən rslite Sep 23 2008-09-23 15:32 '08 at 15:32 2008-09-23 15:32

Burada köməkçi funksiya tez-tez istifadə olunur:

 import os def listdir_fullpath(d): return [os.path.join(d, f) for f in os.listdir(d)] 
89
23 сент. Cavab giltay 23 sentyabr tərəfindən verilir 2008-09-23 16:23 '08 at 4:23 pm 2008-09-23 16:23
 import os for filename in os.listdir("C:\\temp"): print filename 
80
23 сент. curtisk tərəfindən verilmiş cavab 23 sentyabr 2008-09-23 15:34 '08 at 15:34 2008-09-23 15:34

Yutulma qabiliyyətinə ehtiyacınız varsa bunun üçün bir modul var. Məsələn:

 import glob glob.glob('./[0-9].*') 

kimi bir şey qaytaracaq:

 ['./1.gif', './2.txt'] 

Buradakı sənədlərə baxın.

12
24 сент. cavab kenny 24 sep verilir . 2012-09-24 23:58 '12 at 11:58 pm 2012-09-24 23:58

Aşağıdakıları cəhd edin:

 import os for top, dirs, files in os.walk('./'): for nm in files: print os.path.join(top, nm) 
9
23 сент. Cavab paxdiablo 23 sentyabr verilir. 2008-09-23 15:34 '08 at 15:34 2008-09-23 15:34

Yolu göstərmədən cari iş dizinindəki fayllar üçün

Python 2.7:

 import os os.listdir(os.getcwd()) 

Python 3.x:

 import os os.listdir() 

Python 3.x-ə şərh etmək üçün Stam Kaly sayəsində

7
27 июля '16 в 12:47 2016-07-27 12:47 Cavab Dave Mühəndis tərəfindən 27 İyul '16' da 12:47 2016-07-27 12:47 'də verilir

Təkrarlanan tətbiq

 import os def scan_dir(dir): for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): print path else: scan_dir(path) 
5
27 мая '15 в 4:45 2015-05-27 04:45 cavab Arnaldo P. Figueira Figueira 27 may, saat 15: 45-da verilir 2015-05-27 04:45

Bütün mümkün parametrləri ilə uzun bir versiyanı yazdım: http://sam.nipl.net/code/python/det.py

Hesab edirəm ki, bu da uyğun olacaq:

 #!/usr/bin/env python import os import sys def ls(dir, hidden=False, relative=True): nodes = [] for nm in os.listdir(dir): if not hidden and nm.startswith('.'): continue if not relative: nm = os.path.join(dir, nm) nodes.append(nm) nodes.sort() return nodes def find(root, files=True, dirs=False, hidden=False, relative=True, topdown=True): root = os.path.join(root, '') # add slash if not there for parent, ldirs, lfiles in os.walk(root, topdown=topdown): if relative: parent = parent[len(root):] if dirs and parent: yield os.path.join(parent, '') if not hidden: lfiles = [nm for nm in lfiles if not nm.startswith('.')] ldirs[:] = [nm for nm in ldirs if not nm.startswith('.')] # in place if files: lfiles.sort() for nm in lfiles: nm = os.path.join(parent, nm) yield nm def test(root): print "* directory listing, with hidden files:" print ls(root, hidden=True) print print "* recursive listing, with dirs, but no hidden files:" for f in find(root, dirs=True): print f print if __name__ == "__main__": test(*sys.argv[1:]) 
2
01 авг. Cavab Sam Watkins 01 aug tərəfindən verilir . 2012-08-01 09:47 '12 at 9:47 2012-08-01 09:47

Python üçün 2

 #!/bin/python2 import os def scan_dir(path): print map(os.path.abspath, os.listdir(pwd)) 

Python üçün 3

Filtre ve harita üçün bunları bir listeye ()

 #!/bin/python3 import os def scan_dir(path): print(list(map(os.path.abspath, os.listdir(pwd)))) 

Tövsiyə etdiyiniz ki, xəritə və istifadəçi ifadələri və ya siyahıları ilə filterin dəyişdirilməsi:

 #!/bin/python import os def scan_dir(path): print([os.path.abspath(f) for f in os.listdir(path)]) 
1
14 авг. Alejandro Blasco tərəfindən verilmiş cavab 14 Avqust. 2016-08-14 13:11 '16 saat 13:11 'də 2016-08-14 13:11

Pythonic versiyasının bir xəttidir:

 import os dir = 'given_directory_name' filenames = [os.path.join(os.path.dirname(os.path.abspath(__file__)),dir,i) for i in os.listdir(dir)] 

Bu kod, göstərilən kataloq adında bütün fayl və qovluqların tam yolunu bildirir.

1
21 июля '17 в 18:59 2017-07-21 18:59 cavab 21 iyul '17 'də 18:59 2017-07-21 18:59' ye salehinejad verilir

Yalnızca faylları təkrarlayan şəkildə göstərmək üçün yaxşı bir liner. Bunu setup.py direktivi paketində istifadə etdim:

 import os [os.path.join(x[0],y) for x in os.walk('<some_directory>') for y in x[2]] 

Bilirəm ki, bu sualın cavabı deyil, faydalı ola bilər.

1
31 дек. Cavab fivetentaylor tərəfindən verilir 31 dekabr. 2014-12-31 01:35 '15 'də 1:35' de 2014-12-31 01:35

Bilirəm ki bu köhnə bir sual. Bu bir liunx maşın varsa, mən rast gəlmək təmiz yolu.

 import subprocess print(subprocess.check_output(["ls", "/"]).decode("utf8")) 
0
10 нояб. Cavab Abin 10 noyabrda verilir. 2017-11-10 00:04 '17 at 0:04 2017-11-10 00:04

Mənimlə işləyən bir adam, Salehin yuxarıdakı cavabının dəyişdirilmiş versiyasıdır.

Kod belədir:

"dir = 'given_directory_name' filenames = [os.path.abspath (os.path.join (dir, i)) mənim üçün os.listdir (dir)]"

0
18 марта '18 в 19:29 2018-03-18 19:29 Cavab Hassan3571619 18 mart '18, 19:29 2018-03-18 19:29 'də verilir

Başqa bir seçimdir.

 os.scandir(path='.') 

Yollarla göstərilən kataloqda (fayl özniteliği məlumatları ilə birlikdə) girişlərə uyğun olan os.DirEntry obyektlərinin iteratorunu qaytarır.

Məsələn:

 with os.scandir(path) as it: for entry in it: if not entry.name.startswith('.'): print(entry.name) 

Scanner () əvəzinə lister () əvəzinə, faylın növü və ya fayl özniteliğine dair məlumatlara ehtiyacı olan kodun işlənməsini əhəmiyyətli dərəcədə artıra bilər , çünki o.DirEntry obyektləri bir kataloqun taranması zamanı əməliyyat sistemi təmin edərsə bu məlumatı ortaya çıxarır. Bütün os.DirEntry üsulları bir sistem çağırışını edə bilər, ancaq is_dir () və is_file () adətən yalnız simvolik bağlantılar üçün bir sistem zəngini tələb edir; os.DirEntry.stat () həmişə Unix-də sistem zəngini tələb edir, lakin Windows-da simvolik əlaqələr üçün yalnız bir tələb edir.

Python docs

0
05 сент. Cavab Xaino verildi 05 Sep. 2018-09-05 11:13 '18 saat 11:13 2018-09-05 11:13

Aşağıda kataloqdakı qovluq və faylların siyahısı

 def print_directory_contents(sPath): import os for sChild in os.listdir(sPath): sChildPath = os.path.join(sPath,sChild) if os.path.isdir(sChildPath): print_directory_contents(sChildPath) else: print(sChildPath) 
0
21 июля '17 в 8:15 2017-07-21 08:15 Heenashree Khandelwal tərəfindən 21 İyul, '17 'də saat 8:15' də 2017-07-21 08:15 'də cavab verildi

Anladımsa, seçərdim. Joker kartları axtarmaq üçün sadə və çirkli bir şəkildə.

 import re import os [a for a in os.listdir(".") if re.search("^.*\.py$",a)] 
0
25 февр. cavab bng44270 verildi 25 fevral. 2016-02-25 16:31 '16 'da 16:31 2016-02-25 16:31

FYI Filter exten və ya fayl ext import os əlavə edin

 path = '.' for dirname, dirnames, filenames in os.walk(path): # print path to all filenames with extension py. for filename in filenames: fname_path = os.path.join(dirname, filename) fext = os.path.splitext(fname_path)[1] if fext == '.py': print fname_path else: continue 
0
19 авг. Cavab moylop260 19 aug verilir . 2014-08-19 21:17 '14 at 21:17 2014-08-19 21:17

os.listdir() , fayl adlarının və os.listdir() siyahısını yaratmaq üçün böyük olsa da, tez-tez bu adlar olduğunuzda daha çox şey etmək istəyirəm və Python3-də pathlib bu digər vəzifələri asanlaşdırır. Mənə bir göz atın və mənim etdiyim işi xoşlayıram.

Domenin məzmununu siyahıya salmaq üçün bir Path obyekti yaradın və iteratoru işarələyin:

 In [16]: Path('/etc').iterdir() Out[16]: <generator object Path.iterdir at 0x110853fc0> 

Yalnız bir şeyin adlarının siyahısına ehtiyacımız varsa:

 In [17]: [x.name for x in Path('/etc').iterdir()] Out[17]: ['emond.d', 'ntp-restrict.conf', 'periodic', 

Yalnız gəzmək istəyirsinizsə:

 In [18]: [x.name for x in Path('/etc').iterdir() if x.is_dir()] Out[18]: ['emond.d', 'periodic', 'mach_init.d', 

Bu ağacdakı bütün conf fayllarının adlarını istəyirsinizsə:

 In [20]: [x.name for x in Path('/etc').glob('***.conf') if x.stat().st_size > 1024] Out[23]: ['dnsextd.conf', 'pf.conf', 'autofs.conf', 

Nisbətli yolların aradan qaldırılması asanlaşır:

 In [32]: Path('../Operational Metrics.md').resolve() Out[32]: PosixPath('/Users/starver/code/xxxx/Operational Metrics.md') 

Yolu istifadə edərək hərəkət etmək olduqca aydındır (gözlənilməz olsa da):

 In [10]: p = Path('.') In [11]: core = p / 'web' / 'core' In [13]: [x for x in core.iterdir() if x.is_file()] Out[13]: [PosixPath('web/core/metrics.py'), PosixPath('web/core/services.py'), PosixPath('web/core/querysets.py'), 
0
06 дек. Cavab Steve Tarver tərəfindən 06 dekabrda verilir. 2018-12-06 05:08 '18 at 5:08 2018-12-06 05:08
 import os, sys #open files in directory path = "My Documents" dirs = os.listdir( path ) # print the files in given directory for file in dirs: print (file) 
0
17 июня '15 в 0:15 2015-06-17 00:15 Cavab Kevin tərəfindən 17 İyun 2014 günü 0:15 2015-06-17 00:15 tarixində verildi
 #import modules import os _CURRENT_DIR = '.' def rec_tree_traverse(curr_dir, indent): "recurcive function to traverse the directory" #print "[traverse_tree]" try : dfList = [os.path.join(curr_dir, f_or_d) for f_or_d in os.listdir(curr_dir)] except: print "wrong path name/directory name" return for file_or_dir in dfList: if os.path.isdir(file_or_dir): #print "dir : ", print indent, file_or_dir,"\\" rec_tree_traverse(file_or_dir, indent*2) if os.path.isfile(file_or_dir): #print "file : ", print indent, file_or_dir #end if for loop #end of traverse_tree() def main(): base_dir = _CURRENT_DIR rec_tree_traverse(base_dir," ") raw_input("enter any key to exit....") #end of main() if __name__ == '__main__': main() 
0
23 нояб. Cavab 23 noyabr tarixində Alok tərəfindən verilir. 2012-11-23 14:38 '12 at 14:38 2012-11-23 14:38

Tags haqqında suallar və ya bir sual