使用带有python的os.walk查找子文件夹中文件的正确路径?

时间:2016-09-25 20:26:42

标签: python os.walk

我正在尝试创建一个程序,将具有特定文件扩展名的文件复制到给定文件夹。当文件位于子文件夹而不是根文件夹时,程序无法获得正确的路径。在当前状态下,程序可以完美地处理根文件夹中的文件,但是当它在子文件夹中找到匹配的项时会崩溃。该程序尝试使用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)

2 个答案:

答案 0 :(得分:1)

dirpathwalk提供的一项原因之一:它提供了files中项目所在目录的路径。您可以使用它来确定你应该使用的子文件夹。

答案 1 :(得分:0)

file_path = os.path.abspath(i)

这条线明显错误。 请记住,filenames会保留基本文件名列表。此时它只是一个字符串列表,并且(技术上)它们与文件系统中的文件完全没有关联。

os.path.abspath does string-only operations and attempts to merge file name with current working dir。因此,合并的文件名指向不存在的文件

应该做的是root和基本文件名之间的合并(两个值都来自os.walk):

file_path = os.path.abspath(dirpath, i)