Я довольно долго боролся с этой задачей, и здесь я прошу некоторых указаний о том, как подойти к моей проблеме.
Чтобы дать некоторый контекст, у меня есть около 60’000 файлов, которые я пытаюсь реорганизовать. У меня есть 2 CSV-файла, которые я собираюсь использовать.
file1.csv
id | path | objectid | image path
1 | path/to/file1 | 4123 | http://url./image1.jpg
2 | path/to/file2 | 5111 | http://url./image2.jpg
...(about 60'000 rows)
file2.csv
objectid | categoryid | termid | Description | parent
4123 | 8302 | 14 | Category1 | 10
4123 | 5123 | 66 | Category2 | 14
Таким образом, второй файл может иметь несколько строк с одним и тем же objectid (в file1 есть только 1 на строку). Это делает доступными подкатегории, которые создаются с помощью parent — > termid. Categoryid — это только идентификатор для имени категории,но Родительский columnn смотрит на termid, чтобы определить его Родительский.
Поэтому я пытаюсь добиться следующего: возьмите путь к файлу из file1.csv, это objectid найти все строки в file2.csv с тем же objectid, отсортировать их на основе родительского номера (ниже идет первым) и добавить каждое из описаний в правильном порядке (отделены с/) на той же строке к существующему пути из file1. В конечном итоге он загрузит изображение из той же строки и переместит его в файловую систему, но я борюсь с тем, чтобы получить вещь, чтобы сделать имена файлов.
Вот код, который у меня есть прямо сейчас:
import csv
main_dict = {}
with open('files1.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
filepath = row[1]
objectid = row[2]
imagepath = "http://url.com" + row[3] + "_0001.jpg"
key = row[2]
main_dict[key] = row[1]
#print(main_dict)
second_dict = {}
with open('file2.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
key = row[0]
second_dict[key] = row[3]
print(second_dict)
for key in main_dict:
if key in second_dict:
print(second_dict[key] + '/' + main_dict[key] )
Я мог бы идти в совершенно неправильном направлении с этим, так что любая помощь будет высоко оценена.
P. S Я использую Python3.5
Большое спасибо!
Я думаю, что наиболее эффективным способом достижения этого было бы использование модуля pandas как части экосистемы анализа данных python. Я использую python версии 2.7 для следующего примера кода, чтобы сделать то, что вы просите, так что вы можете попробовать портировать это для python 3.5, но должно быть простым.
Панды используют внутренние объекты dataframe (показано как’ df ‘ в коде ниже) для хранения табличной информации
df1 выглядит так:
df2 выглядит так:
df1 выглядит так:

df2 выглядит так:

df3 (новый объект) выглядит следующим образом:
df3 (новый объект) выглядит следующим образом:

df3 (новый объект) выглядит следующим образом:

df3 (новый объект) выглядит так (окончательный):