繁体   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