[英]Crawl through all folders and files in a directory
我的目錄結構如下:
.
├── 0_0_a_example
│ ├── ab.csv
│ └── cd.csv
├── 0_1_b_example
│ ├── ab.csv
│ └── cd.csv
├── 1_0_c_example
│ ├── ab.csv
│ └── cd.csv
└── 1_1_d_example
├── ab.csv
└── cd.csv
我想編寫一個Python腳本,用每個子目錄中的每個第一個文件(然后是每個第二個文件)繪制2x2圖。
我故意將每個子目錄命名為以ixj
開頭,這樣可以ixj
迭代過程(我不在乎其余名稱)。 我正在尋找其他使用glob
和os
答案,但是我發現的解決方案是直接讀取文件,而不是子目錄和文件。
import glob
for i in range(2):
for j in range(2):
subdir = glob.glob(f'{i}_{j}_*')
print(subdir)
file = os.listdir(subdir[0])[0]
print(file)
有沒有更簡單的方法可以做到這一點? (或更有效的方式)
另外,我的解決方案有時會將文件cd.csv
打印為第一個索引。
聽起來好像您想使用walk()。
import os
for directory, subdirlist, filelist in os.walk('/path/root/'):
print(directory)
for f in filelist:
print('\t' + f)
我覺得還不錯
您可以在打印之前對文件進行排序
#sort by name
files.sort(key=lambda x: os.path.basename(x))
如果您的目標是遍歷當前目錄中的所有文件和子目錄,則可以進行簡單的深度優先或廣度優先搜索
import os
import sys
# BFS
dir_to_explore = sys.argv[1] # Absolute path to the directory you want to crawl
print(f"Crawling {dir_to_explore}...")
q = os.listdir(dir_to_explore)
current_path = dir_to_explore
all_files = []
while q:
current_file_or_dir = os.path.join(current_path, q.pop(0))
all_files.append(current_file_or_dir)
if os.path.isdir(current_file_or_dir):
files_and_dirs = list(map(lambda x:os.path.join(current_file_or_dir,x) ,os.listdir(current_file_or_dir)))
q.extend(files_and_dirs)
for i in all_files:
print(i)
all_files
列表將包含所有文件和子目錄的絕對路徑,因此您可以過濾列表以獲取CSV文件,然后直接讀取它們
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.