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