我想在腳本上運行一個目錄中有一個zillion文件。它們都有一個文件名,如:prefix_foo_123456_asdf_asdfasdf.csv。我知道如何在shell中使用文件名中的變量來循環目錄中的文件,但不使用python。有沒有做這樣的事情循環播放python中的文件名
$i=0
for $i<100
./process.py prefix_foo_$i_*
$i++
endloop
我想在腳本上運行一個目錄中有一個zillion文件。它們都有一個文件名,如:prefix_foo_123456_asdf_asdfasdf.csv。我知道如何在shell中使用文件名中的變量來循環目錄中的文件,但不使用python。有沒有做這樣的事情循環播放python中的文件名
$i=0
for $i<100
./process.py prefix_foo_$i_*
$i++
endloop
使用標準庫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)))
+1用於導入重要的東西,而不是產卵子進程:) – mgilson
可以使用glob.glob
或glob.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程序可能不是最好的設計......(你也許可以導入你從所需要的東西其他模塊並運行它而不產生另一個進程)
另一種方式:
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 [] [' 大師']
@Levon(您的聯繫可以追溯到這個頁面,順便說一句。) – vergenzt
您也可以[詢問谷歌](https://www.google.com/search?q=python+loop+over+files)。有幾十億個答案左右;)第一個是'glob',正如@mgilson所指出的那樣。 – JoeFish
@vergenzt Ooops ..感謝捕捉..這麼傻..我修好了! – Levon