#python #csv
#python #csv
Вопрос:
Я пытаюсь автоматизировать подачу некоторых отсканированных документов. Они идентифицируются по номеру объекта, который необходимо сопоставить с именем задания.
У меня есть список извлеченных имен файлов в папке и CSV-файл, который содержит около 50 000 записей с номерами объектов и заданий. Номера.
Я могу получить правильное соответствие для выбранных номеров заданий с помощью == obj_num[0]
etc, Но я не могу понять, как выполнить итерацию по списку.
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:
По сути, вы создаете поиск, 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
ключ as:
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)
Комментарии:
1. спасибо за помощь! Я пробовал выше, и я не могу заставить это работать. Я получаю сообщение об ошибке в строке возврата («вернуть» внешнюю функцию»), но я собираюсь немного подумать и вернуться к этому. Моя конечная цель — добавить номер job_id в каталог, а затем переместить соответствующий PDF-файл в эту папку.
2. извините,
return
там не должно было быть. Я изменил сообщение, чтобы удалить его.