我试图以递归方式检查目录中是否存在3个文件。如果一个(或所有文件)不存在,它将在相应的目录中写入一个文件。
我发现了一些探索如何操作的帖子,例如How to recursively go through all subdirectories and read files?
但是,我想写的文件只能写在某些目录中。 想象一下三层的指向性结构。我想只在第三级检查和编写文件。
我尝试了以下代码:
name1 = 'Info_1_250.csv'
name2 = 'Info_1_500.csv'
name3 = 'Info_1_1000.csv'
path_name = '/Users/user/Desktop/test/'
for root, _, files in os.walk(path_name):
if name1 not in files:
write_file(os.path.join(root, name1))
elif name2 not in files:
write_file(os.path.join(root, name2))
elif name3 not in files:
write_file(os.path.join(root, name1))
write_file是我编写的一个函数,它将写入文件。
问题是如果该代码不存在,此代码会在所有目录中写入文件“name1”。它甚至写在顶级和二级目录(我不想要)。但是在顶级和第二级,它只写文件“name1”。其他两个文件,即使它确实存在,也没有写入。
最后,如果level3中特定目录中缺少这三个文件,则应写入所有三个文件。我只希望文件写在level3。
换句话说,我想转向以下树:
/a
/a/b
/a/b/c
/a/b/d
/a/e
/a/e/f
/a/e/f/Info_1_250.csv
/a/e/g
/a/e/g/Info_1_500.csv
/h
/h/i
/h/i/j
/h/i/j/Info_1_500.csv
/h/i/j/Info_1_1000.csv
进入以下内容:
/a
/a/b
/a/b/c
/a/b/c/Info_1_250.csv
/a/b/c/Info_1_500.csv
/a/b/c/Info_1_1000.csv
/a/b/d
/a/b/d/Info_1_250.csv
/a/b/d/Info_1_500.csv
/a/b/d/Info_1_1000.csv
/a/e
/a/e/f
/a/e/f/Info_1_250.csv
/a/e/f/Info_1_500.csv
/a/e/f/Info_1_1000.csv
/a/e/g
/a/e/g/Info_1_250.csv
/a/e/g/Info_1_500.csv
/a/e/g/Info_1_1000.csv
/h
/h/i
/h/i/j/Info_1_250.csv
/h/i/j/Info_1_500.csv
/h/i/j/Info_1_1000.csv
如您所见,对于树中的每个第三级目录,必须在丢失时创建文件Info_1_250.csv
,Info_1_500.csv
和Info_1_1000.csv
。其他目录必须保持不变。
答案 0 :(得分:2)
您可以尝试使用glob模块访问所有第三级目录,然后检查每个目录中是否存在文件。
import glob
import os
names = ['Info_1_250.csv', 'Info_1_500.csv', 'Info_1_1000.csv']
path_name = '/Users/user/Desktop/test/'
third_level_path = os.path.join(path_name, '*', '*')
dirs = [d for d in glob.glob(third_level_path) if os.path.isdir(d)]
for d in dirs:
for name in names:
f = os.path.join(d, name)
if not os.path.isfile(f):
write_file(f)