在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
是一个将文件附加到文本文件并删除之后的函数。我面临的问题是目录的第一个分支工作得很好,第二个分支(或子目录的子目录)使文件在第二个分支或第二步中,而它应该在第三个分支中。
例如:
Root/
文件夹工作正常
Root/folderstep1
工作正常
Root/folderstep1/folderstep2/folderstep3
错误地将 txt 文件写入 folderstep2
有人可以帮忙吗?提前致谢!
你的 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']
看来,root
和 files
应该是调用 add_file
的足够信息。所以就不需要 os.chdir()
和 glob.glob()
.
我一直在尝试创建一个函数 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
有人可以帮忙吗?提前致谢!
你的 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']
看来,root
和 files
应该是调用 add_file
的足够信息。所以就不需要 os.chdir()
和 glob.glob()
.