ทำไม่ได้ยาก แต่ฉันมีอาการทางจิต
ทำไม่ได้ยาก แต่ฉันมีอาการทางจิต
คำตอบ:
import os
os.listdir("path") # returns list
ทางเดียว:
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")
['c:\\users']
glob.glob(r'c:\users\*')
(glob มันไม่ได้จริงๆรายการไดเรกทอรี แต่ขยายเครื่องหมายดอกจันและสิ่งที่ประสบความสำเร็จในงานที่คล้ายกัน)
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)
glob.glob
หรือos.listdir
จะทำมัน
import glob
ENTER glob.glob(r'c:\users')
ป้อนดูเหมือนว่าจะกลับมา['c:\\users']
เท่านั้น ทำไมถึงเป็นอย่างนั้น? ฉันต้องการใช้ glob.glob เพราะผู้ใช้รายอื่นได้ชี้ให้เห็นมันควรจะส่งคืนเนื้อหาของไดเรกทอรีในขณะที่ไม่สนใจไฟล์ที่ซ่อนอยู่ นี้เป็นสิ่งสำคัญ.
glob
:glob.glob(r'c:\users\*')
os
โมดูลจับทุกสิ่ง
os.listdir(path)
ส่งคืนรายการที่มีชื่อของรายการในไดเรกทอรีที่กำหนดโดยเส้นทาง รายการอยู่ในลำดับที่กำหนดเอง ไม่รวมรายการพิเศษ '.' และ '.. ' แม้ว่าจะมีอยู่ในไดเรกทอรี
มีจำหน่าย: Unix, Windows
ใน Python 3.4+ คุณสามารถใช้pathlib
แพ็คเกจใหม่ได้:
from pathlib import Path
for path in Path('.').iterdir():
print(path)
Path.iterdir()
คืนค่าตัววนซ้ำซึ่งสามารถเปลี่ยนเป็นlist
:
contents = list(Path('.').iterdir())
ตั้งแต่ 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))
(อ่านคำตอบที่ครอบคลุมการปฏิบัติของฉันที่นี่ )
รหัสด้านล่างจะแสดงรายการไดเรกทอรีและไฟล์ภายใน 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)
.XYZ
ไฟล์ในบริบทของระบบไฟล์ Unix) เมื่อใช้กับglob.glob("/home/username/www/.*")
?