У меня проблема, когда я пытаюсь найти данные в словаре csv. Список дат и времени находится в одном CSV, и он должен искать данные до определенной даты и времени во втором CSV. Ищу точное совпадение и 22 следующих записи. Проблема в том, что он извлекает только первую дату и время, а остальные не найдены, хотя я вижу, что они есть. Я чувствую, что у этого есть очень простое решение, но я ничего не могу придумать. Это должно быть проблемой в моем коде итерации.

Код:

import csv
csv_eph = open("G:\\db.csv")
csv_reader_eph = csv.reader(csv_eph, delimiter=",")
csv_dict_eph = csv.DictReader (csv_eph)
csv_matches = open("G:\\query.csv")
csv_reader_matches = csv.reader(csv_matches, delimiter=",")
csv_dict_matches = csv.DictReader (csv_matches)

result = []
var = 0
for row in csv_dict_matches:
    datum = row["Date"]
    cas = row["Time"]
    result.append('\n')
    result.append(row)
    for eph in csv_dict_eph:
        if str(eph["datum"]) == str(datum) and str(eph["cas"]) == str(cas):
            var = 23 
        if var > 0:
            result.append(eph)
            var = var - 1

with open("G:\\compiled.txt", "w") as output:
    for item in result:
        output.write(str(item))
        output.write('\n')

РЕШЕНИЕ! Я внедрил решение jasonharper, и оно работает безупречно, большое спасибо. Это действительно была проблема с концом словаря. Теперь исправлено, это выглядит так и работает как задумано:

import csv
csv_eph = open("G:\\db.csv")
csv_reader_eph = csv.reader(csv_eph, delimiter=",")
csv_dict_eph = csv.DictReader (csv_eph)
csv_matches = open("G:\\query.csv")
csv_reader_matches = csv.reader(csv_matches, delimiter=",")
csv_dict_matches = csv.DictReader (csv_matches)

#jasonharper
eph_list = []
for eph in csv_dict_eph:
    eph_list.append(eph)


print (eph_list)
result = []
var = 0
for row in csv_dict_matches:
    print (row)
    datum = row["Date"]
    cas = row["Time"]
    result.append('\n')
    result.append(row)
    for eph in eph_list:
        if str(eph["datum"]) == str(datum) and str(eph["cas"]) == str(cas):
            var = 23 
        if var > 0:
            result.append(eph)
            var = var - 1

with open("G:\\compiled.txt", "w") as output:
    for item in result:
        output.write(str(item))
        output.write('\n')

2
Ján Miškovec 18 Апр 2020 в 12:23
2
Вы повторяете csv_dict_eph несколько раз, по одному разу для каждой строки в csv_dict_matches. После первой итерации вы окажетесь в конце CSV-файла, и дальнейшие строки возвращаться не будут. Вам нужно либо открыть этот файл внутри цикла, чтобы каждый раз получать новый объект DictReader, либо прочитать все это в список в начале кода (тогда список может повторяться столько раз, сколько вы хотите) .
 – 
jasonharper
18 Апр 2020 в 12:29
1
Мы не сможем помочь, если не увидим ваши данные.
 – 
RoadRunner
18 Апр 2020 в 12:30

1 ответ

Я верю в изменение:

csv_dict_eph = csv.DictReader (csv_eph)

Чтобы :

csv_dict_eph = list(csv.DictReader(csv_eph))

Устранит проблему.

3
Błotosmętek 18 Апр 2020 в 12:35