Python 如果文件不以递归方式存在,则写入文件

Python 如果文件不以递归方式存在,则写入文件,python,file,Python,File,我试图以递归方式检查目录中是否存在3个文件。如果一个(或所有文件)不存在,它将在相应的目录中写入一个文件 我发现一些帖子解释了如何做,比如这里 但是,我想写的文件应该只写在某些目录中。 想象一个有三层的diretory结构。我只想在第三级检查和写入文件 我尝试了以下代码: name1 = 'Info_1_250.csv' name2 = 'Info_1_500.csv' name3 = 'Info_1_1000.csv' path_name = '/Users/user/Desktop/tes

我试图以递归方式检查目录中是否存在3个文件。如果一个(或所有文件)不存在,它将在相应的目录中写入一个文件

我发现一些帖子解释了如何做,比如这里

但是,我想写的文件应该只写在某些目录中。 想象一个有三层的diretory结构。我只想在第三级检查和写入文件

我尝试了以下代码:

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中的特定目录中缺少这三个文件,则应写入所有这三个文件。我只希望文件是写在3级

换言之,我想打开以下树:

/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
。其他目录必须保持不变。

您可以尝试使用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)

您不想要类似这样的内容:“如果(名称1不在文件中)或(名称2不在文件中)或(名称3不在文件中):#编写代码以写入丢失的文件”?我将尝试发布我正在尝试使用的目录文件结构的图片。谢谢。请在前后发布
find
的输出,而不是截图。对不起,“find的输出”是什么意思?代码编写文件。它只是不写“仅”在我想要的地方。如果你只想要第三级,为什么要从第一级开始?@padraiccnningham glob本身不是递归的。但当用作
a/*/*
时,它将给出第三级的所有结果,即
a/b/c
a/b/d
,…这是事实,它不是递归的,但我认为它应该不递归地完成任务。目前还不清楚递归是一种需求还是第一个想到的东西。我结合了上面的部分代码(glob位)。因此,我有使用上面的os.walk进行调查的所有目录的路径名。它起作用了!(是的,递归是我第一个想到的)谢谢!!