2008-09-26 49 views

回答

25

是的,有。 Python方式更好。

有三種可能性:

1)像File.listFiles():

Python有功能os.listdir(路徑)。它像Java方法一樣工作。

2)路徑圖案與膨脹水珠:

模塊水珠包含功能列出使用Unix外殼狀的圖案,例如在文件系統上的文件

 
files = glob.glob('/usr/joe/*.gif') 

3)文件遍歷與步行:

真好看是Python的os.walk功能。

walk方法返回一個生成函數,遞歸地列出給定起始路徑下的所有目錄和文件。

一個例子:

 
import os 
from os.path import join 
for root, dirs, files in os.walk('/usr'): 
    print "Current directory", root 
    print "Sub directories", dirs 
    print "Files", files 
你甚至可以在飛行中從「迪爾斯」,以避免走路到該目錄刪除目錄:如果「喬」在顯示目錄:dirs.remove(「喬」),以避免走進被稱爲目錄「喬」。

listdir和walk有記錄here。 glob記錄爲here

2

直接從Python的Refererence圖書館

>>> import glob 
>>> glob.glob('./[0-9].*') 
['./1.gif', './2.txt'] 
>>> glob.glob('*.gif') 
['1.gif', 'card.gif'] 
>>> glob.glob('?.gif') 
['1.gif'] 
3

嘗試 「listdir同時()」 os模塊(docs)中:

import os 
print os.listdir('.') 
2

看看os.walk()和例子here。用os.walk()可以輕鬆處理整個目錄樹。

從上面的鏈接的一個例子...

# Delete everything reachable from the directory named in 'top', 
# assuming there are no symbolic links. 
# CAUTION: This is dangerous! For example, if top == '/', it 
# could delete all your disk files. 
import os 
for root, dirs, files in os.walk(top, topdown=False): 
    for name in files: 
     os.remove(os.path.join(root, name)) 
    for name in dirs: 
     os.rmdir(os.path.join(root, name)) 
2

如果你想要子目錄,也可以使用os.path.walk。

walk(top, func, arg) 

     Directory tree walk with callback function. 

     For each directory in the directory tree rooted at top (including top 
     itself, but excluding '.' and '..'), call func(arg, dirname, fnames). 
     dirname is the name of the directory, and fnames a list of the names of 
     the files and subdirectories in dirname (excluding '.' and '..'). func 
     may modify the fnames list in-place (e.g. via del or slice assignment), 
     and walk will only recurse into the subdirectories whose names remain in 
     fnames; this can be used to implement a filter, or to impose a specific 
     order of visiting. No semantics are defined for, or required of, arg, 
     beyond that arg is always passed to func. It can be used, e.g., to pass 
     a filename pattern, or a mutable object designed to accumulate 
     statistics. Passing None for arg is common. 
2

我建議不要使用os.path.walk,因爲它在Python 3.0中被刪除。 os.walk更簡單,無論如何,或至少I找到它更簡單。

5

作爲一個長期的Pythonista,我不得不說std庫中的路徑/文件操作函數是次級的:它們不是面向對象的,它們反映了一個過時的,讓 - 包裝 - 操作系統 - 功能 - 無思維的哲學。我很願意推薦'path'模塊作爲包裝器(如果你必須知道的話,在os,os.path,glob和tempfile的附近):更好,更好:OOPy:http://pypi.python.org/pypi/path.py/2.2

這是walk()

dir = path(os.environ['HOME']) 
for f in dir.walk(): 
    if f.isfile() and f.endswith('~'): 
     f.remove() 
1

您還可以檢查出Unipath,Python的osos.pathshutil模塊的面向對象的包裝。

例子:

>>> from unipath import Path 
>>> p = Path('/Users/kermit') 
>>> p.listdir() 
Path(u'/Users/kermit/Applications'), 
Path(u'/Users/kermit/Desktop'), 
Path(u'/Users/kermit/Documents'), 
Path(u'/Users/kermit/Downloads'), 
... 

安裝過奶酪店:

$ pip install unipath 
0

看到我在Python編程了很長一段時間,我已經多次使用了os模塊,使我自己的函數打印目錄中的所有文件。

該函數的代碼:

import os 

def PrintFiles(direc): 
    files = os.listdir(direc) 
    for x in range(len(files)): 
     print("File no. "+str(x+1)+": "+files[x]) 

PrintFiles(direc)