@saund901

Как организовать замену значений в файле на соотвествующие ему id в БД?

Есть .csv файл (разделители - запятые) с такими данными (к примеру): 5c5edef80bbb9246612037.png
Таблица в БД: 5c5edf41173c6532538280.png
Нужно все возможные данные в .csv файле заменить на соответствующие им id из базы данных, как это сделать?
conn = sqlite3.connect("test.db")
cur = conn.cursor()
cur.execute("select * from test")
res = cur.fetchall()
with open("2.csv", 'r') as source, open("res.csv", 'w') as dest:
    reader = csv.reader(source, delimiter=',', quotechar='"')
    writer = csv.writer(dest, delimiter=',', quotechar='"')

    for i, j in zip(res, reader):
        l0 = j[0]
        if l0 in i[1]:
            l0 = i[0]
        l1 = j[1]
        if l1 in i[1]:
            l1 = i[0]
        l2 = j[2]
        l3 = j[3]
        line = l0, l1, l2, l3
        writer.writerow(line)


source.close()
dest.close()

Чтобы получилось:
1,3,gh,hi
2,4,pq,rs


for i, j in itertools.zip_longest(res, reader, fillvalue=list(reader)) ?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
LazyTalent
@LazyTalent
Data Engineer, Freelancer
На скорую руку получилось как-то так:
import sqlite3
import csv

conn = sqlite3.connect("test.db")
cur = conn.cursor()
cur.execute("select * from test")
res = cur.fetchall()
res_dict = {key: value for (value, key) in res}

with open('test.csv', 'r') as f:
    data = [x for x in csv.reader(f)]

new_data = []
for row in data:
    new_row = []
    for col in row:
        try:
            new_col = res_dict[col]
        except:
            new_col = col
        new_row.append(new_col)
    new_data.append(new_row)

with open('test2.csv', 'w') as f:
    w = csv.writer(f)
    w.writerows(new_data)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы