繁体   English   中英

在python中使用os.walk在子文件夹中找到文件的正确路径?

[英]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)

dirpathwalk提供的其中一项功能,这是有原因的:它提供了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM