关于Python,我非常环保,因此请原谅我令人讨厌的格式或较差的优化。
我正在尝试编写脚本,以根据文件名将文件分类到新文件夹中。为了使它们的名称与正确的新位置匹配,我有一个包含两列的csv文件;第一个是文件名的一部分,第二个是文件所属的正确文件夹。
到目前为止,我已经编写了所有东西来提取所需的文件名的一部分,但是现在我仍然无法确定如何将必须具有的字符串与csv中的值进行匹配,然后提取相邻的列。] >
这是我到目前为止所拥有的:
import os import csv def openCSV(csvFile): file = open(csvFile) reader = csv.DictReader(file) data = list(reader) return data def findDemoName(fileName): demoName = fileName[16:] demoName = demoName[:-11] return demoName def moveFiles(sortingFile, sourceDirectory, destinationDirectory): sortingCSV = openCSV(sortingFile) srcDir = sourceDirectory destDir = destinationDirectory for filename in os.listdir(srcDir): name = findDemoName(filename) print(name) # begin program if __name__ == "__main__": # set the CSV used to sort the files fileToSortFrom = '<csv used for sorting>' inputDirectory = '<where the files are located>' outputDirectory = '<where I want to move the files>' moveFiles(fileToSortFrom, inputDirectory, outputDirectory)
现在,它只打印文件名的提取部分并打印出来,这样我就可以确保它正在执行我想要的操作。
所以我的下一步是1.将提取的文件名部分与csv第一栏中的匹配值进行匹配2.取得匹配项旁边的值,并使用它来完成要移动到的文件的目标路径。
我找到了该线程match names in csv file to filename in folder,但我不知道csv的答案与之匹配。
如果我需要澄清一些要点,请告诉我,我会的。
感谢您阅读:)
我试图通过这种方式迷路,这是我到目前为止所拥有的:
import os, shutil
import csv
def openCSV(csvFile):
file = open(csvFile)
reader = csv.DictReader(file)
data = list(reader)
return data
"""def createReader(csvFile):
file = open(csvFile)
reader = csv.DictReader(file)
return reader"""
def extractDemoName(fileName):
originalName = fileName
demoName = fileName[16:]
demoName = demoName[:-11]
return demoName
def moveFiles(sortingFile, sourceDirectory, destinationDirectory, prefix, suffix):
reader = openCSV(sortingFile)
#reader = createReader(sortingFile)
srcDir = sourceDirectory
destDir = destinationDirectory
column1 = 'DemographicName'
column2 = 'DemographicTypeName'
folder = ''
for filename in os.listdir(srcDir):
name = extractDemoName(filename)
for row in reader:
if row(column1) == name:
folder = row(column2)
destination = destDir + folder
file = prefix + name + suffix
shutil.copy(file, destination)
print('Moved ' + file + ' to ' + destination)
#else reader.next()
print(name)
# begin program
if __name__ == "__main__":
# set the CSV used to sort the files
fileToSortFrom = '<csv file>'
inputDirectory = '<source path>'
outputDirectory = '<destination path>'
filePrefix = '<beginning text of files>'
fileSuffix = '<ending text of files>'
moveFiles(fileToSortFrom, inputDirectory, outputDirectory, filePrefix, fileSuffix)
但是现在我收到以下错误:
Traceback (most recent call last):
File "script.py", line 63, in <module>
moveFiles(fileToSortFrom, inputDirectory, outputDirectory, filePrefix, fileSuffix)
File "script.py", line 38, in moveFiles
if row(column1) == name:
TypeError: 'collections.OrderedDict' object is not callable
我在使用Python时非常环保,因此请原谅我令人讨厌的格式或较差的优化。我正在尝试编写一个脚本,以根据文件名将文件分类到新文件夹中。为了...
有问题(第38行)
if row(column1) == name:
此脚本从您在方法move_files
的from_dir
中传递的目录中读取文件。它检查from_dir
中的文件是否存在于csv_file中,如果存在,它将获取位置并将其移至该目录。