簡體   English   中英

搜尋目錄中的所有文件夾和文件

[英]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迭代過程(我不在乎其余名稱)。 我正在尋找其他使用globos答案,但是我發現的解決方案是直接讀取文件,而不是子目錄和文件。

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.

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