我正在尝试自动执行一些扫描文档的归档。这些由需要与作业名称匹配的对象编号标识。
我有一个文件夹中提取的文件名列表和一个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)
答案 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)