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

时间:2015-07-29 06:33:19

标签: python os.walk

我一直在尝试创建一个函数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是一个将文件附加到文本文件并随后删除的函数。我面临的问题是目录的第一个分支完美地运行第二个分支(或子目录的子目录)使文件在第二个分支或第二个步骤中,当它被假定为在第三个分支。

例如:

  • Root/文件夹工作正常
  • Root/folderstep1工作正常
  • Root/folderstep1/folderstep2/folderstep3错误地将txt文件写入folderstep2

请有人帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

add_to_file函数的第四个参数看起来很可疑:您似乎想要为当前目录构建类似"folderstep3_data.txt"的文件名,而是传递类似{{1}的内容}。但由于我不知道./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 - loop)包含一个文本文件(使用os.walk()并仅使用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'] root应该是足够的信息来调用files。因此,不需要add_fileos.chdir()