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

时间:2015-08-25 17:05:30

标签: python file

我试图以递归方式检查目录中是否存在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.csvInfo_1_500.csvInfo_1_1000.csv。其他目录必须保持不变。

1 个答案:

答案 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)