Написание CSV, а затем проверка значений в столбцах и запись дополнительных данных - PullRequest
0 голосов
/ 11 ноября 2019

До сих пор я написал длинный список (~ 45000 строк) идентификационных номеров вместе с дополнительными ссылочными значениями в CSV-файл. Данные структурированы следующим образом:

12345678 | 2
56789012 | 10
90123456 | 46
...

Код, который я написал для этого, выглядит следующим образом:

def list_writer():
    with open (csv_dir + '/' + csv_filename, mode = "w", newline='') as csvfile:
        writer = csv.writer(csvfile, lineterminator='\n', delimiter=';')
        for row in ID_list:
            writer.writerow(row)

list_writer()

Каждый идентификационный номер (левый столбец) связан сномер ссылки (правый столбец), который находится в диапазоне 1-100. У меня есть несколько дополнительных списков, которые связывают каждый ссылочный номер с дополнительной информацией (цена, количество и т. Д.).

Теперь моя цель - пройти по всем ссылочным номерам во втором столбце длинного csv-файла, который я написал, и записать дополнительные свойства в следующий столбец. Я немного покопался в StackExchange, но пока ничего не получалось. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Это идеальный вариант использования для SQL. Если вы хотите реализовать SQL-подобные функции в Python, часто рекомендуется использовать pandas . Это удобно, легко писать и читать, и быстро. Для вашего случая, предполагая, что дополнительные значения будут сохранены в списке кортежей или в словаре:

import pandas as pd


csv = [
    (1, 10),
    (2, 20),
    (3, 30),
]

csv_df = pd.DataFrame(csv, columns=["id", "reference"])

# This would be the data you have in your csv. For actually loading them from your 
# csv located at `filepath`, use 
#
#      pd.DataFrame.read_csv(filepath)

additional_data = [
    (1, "a"),
    (2, "b"),
    (3, "c"),
]  # This could also be a dictionary

additional_df = pd.DataFrame(additional_data, columns=["id", "name"])

final_df = csv_df.merge(additional_df, on="id")

Тогда мы получим

>>> final_df
   id  reference name
0   1         10    a
1   2         20    b
2   3         30    c
0 голосов
/ 11 ноября 2019

это звучит как то, что я бы сделал в реляционной (то есть, SQL) базе данных, там есть много инструментов для проверки ваших данных и обеспечения того, чтобы все они оставались неизменными

, если вы хотите сделать это вPython, ты бы сделал что-то вроде:

# put your "lists of prices" into a dictionary, keyed by the reference number
# assuming the prices is in the form [(ref1, price1), (ref2, price2)]
ref_prices = {}
for ref, price in PRICE_list:
  ref_prices[ref] = price

# do the same for each additional list:
# shorter syntax than the above
ref_quantity = {ref: qty for ref, qty in QTY_list}

# combine all of the above and write into a file
with open(filename, 'w') as fd:
  out = csv.writer(fd, delimiter=';')
  for id, ref in ID_list:
    out.writerow((id, ref, ref_prices[ref], ref_quantity[ref]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...