@k4nt

Как открывать csv файл, добавлять столицы, данные и сохранять их корректно в python?

задача открыть csv файл, добавить столбцы, новые данные и сохранить.
У меня все данные сохраняются не корректно. Все строки показывают, что есть данные только на первых столбцах. Остальные пустые.
Как Вы делаете, что бы данные корректно сохранялись?

# Если нужно колонки нет- мы её добавим
            csv_file = pd.read_csv(pathID, index_col=[0])

            # Создаём список для загрузки в него колонок
            list_of_column_names = []
            # Загружаем
            for row in csv_file:
                list_of_column_names.append(row)

 
            for i in user_message:
                if i in list_of_column_names:
                    log_out(str(message.chat.id) + ": Элемент " + i + " есть в списке")
                # Если колонки нет- мы её добавляем.
                else:
                    log_out(str(message.chat.id) + ": Элемента " + i + " нет в списке. Добавляем его.")
                    csv_file[i] = 0
                    csv_file.to_csv(pathID)

            recordable_words = {}

            # Открываем файл
            csv_file = pd.read_csv(pathID, index_col=[0])
            # Считываем заново все колонки и записываем в файл.
            list_of_column_names = []

            # тут нужно записать данные времени и пользователя

            for row in csv_file:
                list_of_column_names.append(row)

            # Заполняем технические поля
            recordable_words['Year'] = int(time_now.year)
            recordable_words['Month'] = int(time_now.month)
            recordable_words['Day'] = int(time_now.day)
            recordable_words['Weekday'] = int(time_now.weekday())
            recordable_words['Hour'] = int(time_now.hour)
            recordable_words['Minute'] = int(time_now.minute)
            recordable_words['Second'] = int(time_now.second)




            for locn in list_of_column_names:
                for um in user_message:
                    # Если "колонка" есть в словаре:
                    if um in recordable_words:
                        # Если значение существует- прибавляем
                        if um == locn:
                            recordable_words[um] = int(recordable_words[um]) + 1
                    else:
                        # Если значение встречается в первый раз- выставляем 0.
                        recordable_words[um] = 0  # Я хз по какой причине тут нужен 0. По моей логике нужен 1. Но иначе данные на 1 больше, чем они есть.
                        #recordable_words[um] = recordable_words[um] + 1
                try:
                     x = recordable_words[locn]
                except:
                    recordable_words[locn] = 0

 
            with open(pathID, "a", newline="") as file:
                columns = recordable_words.keys()
                print(columns)
                writer = csv.DictWriter(file,
                                        fieldnames=columns,
                                        delimiter=',', 
                                        #restval=0, 
                                        extrasaction='ignore')
                #writer.writeheader()
                writer.writerow(recordable_words)
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 1
@RiderMC
Я вот так в .csv записываю
with open('file.csv', 'w') as f:
                    writer = csv.writer(f, lineterminator="\n")
                    writer.writerow(text, user['id']])
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы