【发布时间】:2019-03-28 03:38:12
【问题描述】:
Python 版本:2.7.13
操作系统:Windows
所以我正在编写一个脚本,根据文件名中包含文件夹名称的要求,将各种名称的文件复制到特定文件夹中。 (我对此相当陌生,只是试图创建脚本以提高工作效率 - 我查看了大量 StackOverflow 页面和网络上的一些地方,但找不到与 Python 相关的内容)
我已将文件夹转换为可以搜索文件名的字符串列表,但是当我将它们复制过来时,它们都会进入找到的第一个文件夹。我需要帮助的确切部分是如何将文件复制到找到字符串匹配的文件夹中。
本质上,“如果有的话(目录中的 x 对应于列表中的 x):”、“将文件移动到 x”。
关于 sourceFolder 和 destFolder,这些是从代码前面的用户输入中获取的变量。 (sourceFolder 包含文件,destFolder 包含我要复制到的子文件夹)
编辑:我在 destFolder 中有多个子文件夹,如果它们与字符串匹配,我可以复制要复制的文件(如果不存在匹配项,则不会复制)。但是,当它们复制时,它们都会转到同一个子文件夹。
list=[]
if var == "y": #Checks for 'Yes' answer
for subdir, dirs, files in os.walk(destFolder):
subdirName = subdir[len(destFolder) + 1:] #Pulls subfolder names as strings
print subdirName
list.insert(0, subdirName)
print "Added to list"
for subdir, dirs, files in os.walk(sourceFolder):
for file in files:
dirName = os.path.splitext(file)[0] #This is the filename without the path
destination = "{0}\{1}".format(destFolder, subdirName)
string = dirName #this is the string we're looking in
if any(x in dirName for x in list):
print "Found string: " + dirName
shutil.copy2(os.path.join(subdir, file), destination)
else:
print "No String found in: " + dirName
编辑 2: 经过一些调整和外部帮助,这就是我最终得到的工作代码(为了任何遇到这个问题的人)。一些变量更改了名称,但希望结构是可读的。
进口shutil,操作系统,重新,统计 从操作系统导入列表目录 from os.path 导入isfile,加入
destKey = dict()
if var == "y": #Checks for 'Yes' answer
for root, dirs, files in os.walk(destFolder):
for dest_folder in dirs: #This is the folder, for each we look at
destKey[dest_folder] = os.path.join(root, dest_folder) #This is where we convert it to a dictionary with a key
for sourceFile in os.listdir(sourceFolder):
print ('Source File: {0}').format(sourceFile)
sourceFileName = os.path.basename(sourceFile) #filename, no path
for dest_folder_name in destKey.keys():
if dest_folder_name in sourceFileName.split('-'): #checks for dest name in sourceFile
destination = destKey[dest_folder_name]
print "Key match found for" + dest_folder_name
shutil.copy2(os.path.join(sourceFolder, sourceFile), destination)
print "Item copied: " + sourceFile
【问题讨论】:
标签: python