簡體   English   中英

Python:遍歷多個詞典中的文件

[英]Python: Iterate through Files in Multiple Dictionaries

我要在其上運行腳本的詞典中有許多文件。 通常,我會使用“ os.listdir()”列出當前工作目錄中的文件,然后告訴我的腳本在這些文件上運行。

例如:

dir = os.listdir():
for i in dir:
  do stuff

但是,當我不在當前工作目錄中時,我想在這些文件上運行腳本。 這樣,以后我就可以遍歷多個文件夾。 有什么建議么?

listdir()采用path參數。 您可以使用如下形式:

filelist1 = os.listdir("/home/user/directory1")
filelist2 = os.listdir("/home/user/directory2")

為了讀取目錄下可用的所有文件:

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

要列出目錄中所有可用的子目錄:

from os import listdir
from os.path import isdir, join

subdirs = [name for name in listdir(parent_dir) if isdir(join(parent_dir, name))]

現在,讓我們結合這些難題,僅從父目錄的子目錄列出文件:

from os import listdir
from os.path import isfile, join, isdir

parent_dir = "/foo/bar"
dirs = [name for name in listdir(parent_dir) if isdir(join(parent_dir, name))]
onlyfiles = []

for dir in dirs:
    f = [f for f in listdir(dir) if isfile(join(dir, f))]
    onlyfiles += f

print(onlyfiles)

輸出示例:

$ python dummy.py 
['Dockerfile', 'docker-compose.yml', '53009790.py', 'MOCK_DATA.csv', '53021557.py', '53023079.py']
$ python3 dummy.py 
['Dockerfile', 'docker-compose.yml', '53009790.py', 'MOCK_DATA.csv', '53021557.py', '53023079.py']

您也可以嘗試使用glob模塊,因為它可以進行模式匹配。

>>> import glob
>>> print(glob.glob('/home/rszamszur/*.sh'))
['/home/rszamszur/work-monitors.sh', '/home/rszamszur/default-monitor.sh', '/home/rszamszur/home-monitors.sh']

OS模塊和glob之間的主要區別在於OS將適用於所有系統,而glob僅適用於Unix。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM