ฉันจะแสดงรายการเนื้อหาของไดเรกทอรีใน Python ได้อย่างไร?


คำตอบ:



52

ทางเดียว:

import os
os.listdir("/home/username/www/")

อีกทางหนึ่ง :

glob.glob("/home/username/www/*")

ตัวอย่างพบได้ที่นี่

glob.globวิธีการดังกล่าวจะไม่ได้รายชื่อไฟล์ที่ซ่อนอยู่

ตั้งแต่แรกที่ฉันตอบคำถามนี้เมื่อหลายปีก่อนpathlibถูกเพิ่มใน Python วิธีที่ฉันต้องการแสดงรายการไดเรกทอรีมักจะเกี่ยวข้องกับiterdirวิธีการในPathวัตถุ:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

จะ glob.glob รายการซ่อนไฟล์ (ผมถือว่าคุณหมายถึง.XYZไฟล์ในบริบทของระบบไฟล์ Unix) เมื่อใช้กับglob.glob("/home/username/www/.*")?
Andy Finkenstadt

ใช่ฉันหมายถึงไฟล์ที่ขึ้นต้นด้วยจุด ตัวอย่างที่คุณให้จะใช้ได้กับไฟล์ที่ถูกซ่อน
แต้ม Hunner

ฉันเพิ่งนำเข้า glob และใช้ glob.glob (r'c: \ users ') แต่มันกลับคืนมาเท่านั้น['c:\\users']
Musixauce3000

1
@ Musixauce3000: คุณจะต้องทำglob.glob(r'c:\users\*')(glob มันไม่ได้จริงๆรายการไดเรกทอรี แต่ขยายเครื่องหมายดอกจันและสิ่งที่ประสบความสำเร็จในงานที่คล้ายกัน)
แต้ม Hunner

38

os.walk สามารถใช้ได้ถ้าคุณต้องการการเรียกซ้ำ:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)

18

glob.globหรือos.listdirจะทำมัน


import globENTER glob.glob(r'c:\users')ป้อนดูเหมือนว่าจะกลับมา['c:\\users']เท่านั้น ทำไมถึงเป็นอย่างนั้น? ฉันต้องการใช้ glob.glob เพราะผู้ใช้รายอื่นได้ชี้ให้เห็นมันควรจะส่งคืนเนื้อหาของไดเรกทอรีในขณะที่ไม่สนใจไฟล์ที่ซ่อนอยู่ นี้เป็นสิ่งสำคัญ.
Musixauce3000

เพราะคุณต้องระบุสัญลักษณ์แทนด้วยglob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

osโมดูลจับทุกสิ่ง

os.listdir(path)

ส่งคืนรายการที่มีชื่อของรายการในไดเรกทอรีที่กำหนดโดยเส้นทาง รายการอยู่ในลำดับที่กำหนดเอง ไม่รวมรายการพิเศษ '.' และ '.. ' แม้ว่าจะมีอยู่ในไดเรกทอรี

มีจำหน่าย: Unix, Windows


4

ใน Python 3.4+ คุณสามารถใช้pathlibแพ็คเกจใหม่ได้:

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()คืนค่าตัววนซ้ำซึ่งสามารถเปลี่ยนเป็นlist:

contents = list(Path('.').iterdir())

3

ตั้งแต่ Python 3.5 os.scandirคุณสามารถใช้

ความแตกต่างคือมันส่งคืนรายการไฟล์ไม่ใช่ชื่อ ในบาง OS เช่น windows หมายความว่าคุณไม่จำเป็นต้องos.path.isdir/fileรู้ว่ามันเป็นไฟล์หรือไม่และนั่นช่วยประหยัดเวลา CPU เพราะstatเสร็จสิ้นเมื่อทำการสแกน dir ใน Windows:

ตัวอย่างเพื่อแสดงรายการไดเร็กทอรีและไฟล์พิมพ์ที่ใหญ่กว่าmax_valueไบต์:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(อ่านคำตอบที่ครอบคลุมการปฏิบัติของฉันที่นี่ )


2

รหัสด้านล่างจะแสดงรายการไดเรกทอรีและไฟล์ภายใน dir อีกคนหนึ่งคือ os.walk

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.