[英]Finding correct path to files in subfolders with os.walk with python?
我正在尝试创建一个程序,将具有某些文件扩展名的文件复制到给定的文件夹。 当文件位于子文件夹而不是根文件夹中时,程序将无法获取正确的路径。 在当前状态下,该程序可以完美地处理根文件夹中的文件,但是当它在子文件夹中找到匹配的项目时,它将崩溃。 该程序尝试将rootfolder用作目录,而不是正确的子文件夹。
我的代码如下
# Selective_copy.py walks through file tree and copies files with
# certain extension to give folder
import shutil
import os
import re
# Deciding the folders and extensions to be targeted
# TODO: user input instead of static values
extension = "zip"
source_folder = "/Users/viliheikkila/documents/kooditreeni/"
destination_folder = "/Users/viliheikkila/documents/test"
def Selective_copy(source_folder):
# create regex to identify file extensions
mo = re.compile(r"(\w+).(\w+)") # Group(2) represents the file extension
for dirpath, dirnames, filenames in os.walk(source_folder):
for i in filenames:
if mo.search(i).group(2) == extension:
file_path = os.path.abspath(i)
print("Copying from " + file_path + " to " + destination_folder)
shutil.copy(file_path, destination_folder)
Selective_copy(source_folder)
dirpath
是walk
提供的其中一项功能,这是有原因的:它提供了files
项目所在目录的路径。您可以使用它来确定您应该使用的子文件夹。
file_path = os.path.abspath(i)
这行公然错了。 请记住, filenames
保留了基本文件名列表。 此时,这只是一个字符串列表,并且(从技术上来说)它们根本不与文件系统中的文件关联。
os.path.abspath
执行仅字符串操作,并尝试将文件名与当前工作目录合并 。 结果,合并的文件名指向不存在的文件。
应该做的是在root
文件名和基本文件名之间合并(两个值都来自os.walk
):
file_path = os.path.abspath(dirpath, i)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.