在Python中使用os.walk为相应的文件夹和子文件夹创建一个txt文件

Using os.walk in Python to create a txt file for a corresponding folder and subfolders

我一直在尝试创建一个函数 a,它使用 os.walk 遍历目录树并创建一个以文件夹命名的文本文件,并且仅在有数据文件时才将其创建为文本文件在源文件夹中并将文件附加到该 txt 文件。它实际上是在另一个映射的网络驱动器上备份数据文件

def copy_from_dest(src, dest):
    os.chdir(src)
    for root, dirs, files in os.walk(".",topdown=True):
        for name in dirs:
            newdir = (os.path.join(root, name))
            os.chdir(newdir)        
            filenames = glob.glob('*.txt')
            if len(filenames) > 1:
                for fname in filenames:
                    add_to_file(src + newdir, fname, dest + newdir, newdir + "_data.txt")
            os.chdir(src)

add_to_file 是一个将文件附加到文本文件并删除之后的函数。我面临的问题是目录的第一个分支工作得很好,第二个分支(或子目录的子目录)使文件在第二个分支或第二步中,而它应该在第三个分支中。

例如:

有人可以帮忙吗?提前致谢!

你的 add_to_file 函数的第四个参数看起来很可疑:你似乎想为当前目录构造一个像 "folderstep3_data.txt" 这样的文件名,但你却传递了像 ./folderstep1/folderstep2/folderstep3_data.txt。但由于我不知道 add_to_file 内部是如何工作的,所以我无法判断。

尝试将参数记录到 add_to_file:

print (src + newdir), fname, (dest + newdir), newdir + "_data.txt"

看看,是否能揭示问题所在。

另外两点:

if len(filenames)>1:应该是>0吧?或者如果至少存在 两个 个文本文件,您只想写点什么?

此外,由于 os.walk() 已经为您遍历了所有子目录,并且还为您提供了每个子目录的文件名列表,如果 files(您得到的变量来自 os.walk()-loop) 包含一个文本文件(使用 str.endswith('.txt') 并且只使用 root 作为目录?

如果你有这样的结构

+ src
+--+ subfolder 1
|  +-- file1.txt
|  +-- file2.txt
|  +--+ subfolder1.2
|     +-- file3.txt
+--+ subfolder 2
   +-- file4.txt

然后os.walk()会给你

root=src, dirs=['subfolder1','subfolder2'], files=[]
root=src\subfolder1, dirs=['subfolder1.2'], files=['file1.txt','file2.txt']
root=src\subfolder1\subfolder1.2, dirs=[], files=['file3.txt']
root=src\subfolder2, files=['file3.txt']

看来,rootfiles 应该是调用 add_file 的足够信息。所以就不需要 os.chdir()glob.glob().