我一直在尝试创建一个函数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 请有人帮忙吗?提前谢谢!
答案 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_file
和os.chdir()
。