Python версия: 2.7.13
ОС: Windows
Поэтому я пишу скрипт для копирования файлов с разными именами в определенную папку, исходя из требования, что они содержат папкуимя внутри имени файла.(Я довольно новичок в этом, просто пытаюсь создать сценарии для большей эффективности в моей работе - я просмотрел тонну страниц StackOverflow и некоторых мест в Интернете, но не смог найти что-то связанное с Python для этой конкретной задачи)
Я преобразовал папки в список строк, по которым можно искать имена файлов, однако, когда я копирую их, все они попадают в первую найденную папку.Точная часть этого мне нужна помощь, как получить файл для копирования в папку, для которой найдено совпадение строк.
По существу, "если таковые имеются (x в dirName для 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: После некоторой настройки и помощи извне, вот что я закончил с рабочим кодом (радииз всех, кто сталкивался с этим).Некоторые переменные изменили имена, но, надеюсь, структура будет читабельной.
import shutil, os, re, stat из os import listdir из os.path import isfile, join
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