2012-06-11 87 views
1

我想在腳本上運行一個目錄中有一個zillion文件。它們都有一個文件名,如:prefix_foo_123456_asdf_asdfasdf.csv。我知道如何在shell中使用文件名中的變量來循環目錄中的文件,但不使用python。有沒有做這樣的事情循環播放python中的文件名

$i=0 

for $i<100 

./process.py prefix_foo_$i_* 

$i++ 

endloop 
+0

@Levon(您的聯繫可以追溯到這個頁面,順便說一句。) – vergenzt

+0

您也可以[詢問谷歌](https://www.google.com/search?q=python+loop+over+files)。有幾十億個答案左右;)第一個是'glob',正如@mgilson所指出的那樣。 – JoeFish

+0

@vergenzt Ooops ..感謝捕捉..這麼傻..我修好了! – Levon

回答

2

使用標準庫glob。假設process.py的功能是在功能process_one_file:

from glob import glob 
from process import process_one_file 

for i in range(100): 
    process_one_file(glob('prefix_foo_{}_*'.format(i))) 
+0

+1用於導入重要的東西,而不是產卵子進程:) – mgilson

4

可以使用glob.globglob.iglob獲取文件名列表/迭代器相對應的方式。

例如如果你的目錄下有 「FILE1.TXT」, 「FILE2.TXT」, 「file3.txt」

import glob 
print (glob.glob('*.txt')) #['file1.txt','file2.txt','file3.txt'] 

雖然名單並不一定會進行排序。

你的循環可以寫成:

import subprocess 
import glob 
for i in range(100): 
    files=glob.glob('prefix_foo_%d_*'%(i)) 
    subprocess.call(['./process.py']+files) 

當然,在使用Python子進程來運行另一個Python程序可能不是最好的設計......(你也許可以導入你從所需要的東西其他模塊並運行它而不產生另一個進程)

2

另一種方式:

from os import walk 

>>> for filename, subdirs, dirs in walk('/home'): 
...  print (filename, subdirs, dirs) 

輸出:

家/二/工作區/ local2stream/MediaElement的/ git的/ info [] ['exclude'] /home/di/workspace/local2stream/mediaelement/.git/logs ['refs'] ['HEAD'] /home/di/workspace/local2stream/mediaelement/.git/日誌/參考 [ '遙控', '頭部'] [] /home/di/workspace/local2stream/mediaelement/.git/logs/refs/remotes [ '原點'] [] /家/二/工作區/ local2stream/mediaelement/.git/logs/refs/remotes/origin [] ['HEAD'] /home/di/workspace/local2stream/mediaelement/.git/logs/refs/heads [] ['master']/home /di/workspace/local2stream/mediaelement/.git/objects ['info','pack'] [] /home/di/workspace/local2stream/mediaelement/.git/objects/info [] [] /home /di/workspace/local2stream/mediaelement/.git/objects/pack [] [ '包-a378eaa927a4825f049faf10bab35cf5d94545f1.idx', '包-a378eaa927a4825f049faf10bab35cf5d94545f1.pack'] /家/二/ workspa ce/local2stream/mediaelement/.git/refs ['tags', 'remotes','heads'] [] /home/di/workspace/local2stream/mediaelement/.git/refs/tags [] [] /home/di/workspace/local2stream/mediaelement/.git/refs/remotes ['origin'] [] /home/di/workspace/local2stream/mediaelement/.git/refs/remotes/origin [] ['HEAD '] /home/di/workspace/local2stream/mediaelement/.git/refs/heads [] [' 大師']