Python-将字符串与csv值匹配,然后提取相邻的列

问题描述 投票:0回答:2

关于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时非常环保,因此请原谅我令人讨厌的格式或较差的优化。我正在尝试编写一个脚本,以根据文件名将文件分类到新文件夹中。为了...

python string csv match filenames
2个回答
0
投票

有问题(第38行)

if row(column1) == name:

0
投票

此脚本从您在方法move_filesfrom_dir中传递的目录中读取文件。它检查from_dir中的文件是否存在于csv_file中,如果存在,它将获取位置并将其移至该目录。

© www.soinside.com 2019 - 2024. All rights reserved.