Understanding os.walk Python



我正在尝试遍历目录结构并创建一个类似的结构(但不完全相同(。

我对os.path.join的使用感到困惑,以下具有2个或更多目录深度的代码可以完美运行。

DIR_1 :

A | file2.txt

B | 文件3.txt

文件1.txt

inputpath = DIR_1
outputpath = DIR_2
for dirpath, dirnames, filenames in os.walk(inputpath):
structure = os.path.join(outputpath, dirpath[len(inputpath):])
for f1 in filenames:
f = os.path.splitext(f1)[0]
path = structure + '/' + f
print ("The path is: ", path)
file1 = path + '/' + f1
print ("The file path is: ", file1)
file_dir = dirpath + '/' + f1;
print ("The file dir path is: ", file_dir)
print ("n")

但是,如果只有一个深度级别,它会添加额外的"/"。有没有办法避免这种情况?

例如,以下给出:

The path is:  DIR_2//file1
The file path is:  DIR_2//file1/file1.txt
The file dir path is:  DIR_1/file1.txt

The path is:  /A/file2
The file path is:  /A/file2/file2.txt
The file dir path is:  DIR_1/A/file2.txt

The path is:  /B/file3
The file path is:  /B/file3/file3.txt
The file dir path is:  DIR_1/B/file3.txt

编辑 1:

输出目录DIR_2结构与原始Dir_1相似,但不完全相同。

DIR_2应该具有额外的一级文件名目录;例如,而不仅仅是

DIR_2/文件1.txt

它应该是

DIR_2/文件1/文件1.txt。

DIR_2/A/file2/file2.txt.同样地。

编辑2:我还需要阅读目录(DIR_1(的内容,并选择相关文本放入相应的输出文件(DIR_2(。所以我不能忽视它。

你不必担心dirpath,只用它来获取原始文件,所有信息来重新创建你在dirnames中已有的目录结构。用于重新创建文件结构的代码可能如下所示:

for root, dirs, files in os.walk( input_path ) :
offset = len(input_path)
if len(root) > len(input_path) :
offset += 1   # remove an extra leading separator
relative_path = root[offset:]
for d in dirs :  # create folders
os.mkdir( os.path.join( output_path, relative_path, d )

for f in files : # copy the files
shutil.copy( os.path.join( root, f),
os.path.join( output_path, relative_path, f))

就是这样!

相关内容

  • 没有找到相关文章

最新更新