У меня проблема, когда я пытаюсь найти данные в словаре 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')
1 ответ
Я верю в изменение:
csv_dict_eph = csv.DictReader (csv_eph)
Чтобы :
csv_dict_eph = list(csv.DictReader(csv_eph))
Устранит проблему.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
csv_dict_eph
несколько раз, по одному разу для каждой строки вcsv_dict_matches
. После первой итерации вы окажетесь в конце CSV-файла, и дальнейшие строки возвращаться не будут. Вам нужно либо открыть этот файл внутри цикла, чтобы каждый раз получать новый объект DictReader, либо прочитать все это в список в начале кода (тогда список может повторяться столько раз, сколько вы хотите) .