[英]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.