遍历CSV文件以匹配另一个列表中的项目

时间:2019-03-24 16:01:33

标签: python csv

我正在尝试自动执行一些扫描文档的归档。这些由需要与作业名称匹配的对象编号标识。

我有一个文件夹中提取的文件名列表和一个CSV文件,其中包含约50,000条对象号和作业号记录。
我可以使用== obj_num[0]等来正确匹配选定的工作编号,但是我不知道如何遍历列表。

import glob,os,csv

items = glob.glob('*.pdf')
obj_num = [".".join(f.split(".")[:-1]) for f in items if os.path.isfile(f)]

job_id = []


with open('locations.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    field_names = ['jobid', 'ItemUniqueId', '###anotherfield', '###anotherfield2']
    for row in csv_reader:
            if row['ItemUniqueId'] == obj_num:
                job_id = row['jobid']
    print(job_id)

1 个答案:

答案 0 :(得分:0)

基本上,您将建立一个查询dict,您可以根据相关的JobID(来自文件名)直接查找ItemID。因此,您遍历CSV文件一次,并建立查找:

lookup = {}
with open('locations.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    field_names = ['jobid', 'ItemUniqueId', '###anotherfield', '###anotherfield2']
    for row in csv_reader:
        lookup[row['ItemUniqueId']] = row['jobid']

然后,对于每个文件名,使用JobID作为关键字,搜索ItemID的查找:

job_id = lookup.get(item_id) # returns None if not found
job_id = lookup[item_id]     # raises as KeyError if not found

您还可以使用以下方法检查查询中是否存在ItemID

if item_id in lookup:
    # something something something

此外,您可能想看看pathlib,它是一个内置模块,可为您提供对文件系统的高级访问。如果我正确阅读了您的代码,则表示您正在尝试从文件名中删除扩展名,Path.stem()会为您执行扩展名,例如:

from pathlib import Path

for pdf_file in Path('your path here').glob('*.pdf'):
    file_name_wo_suffix = pdf_file.stem
    job_id = lookup.get(file_name_wo_suffix)