словарь вывода и ввода - PullRequest
       2

словарь вывода и ввода

0 голосов
/ 28 августа 2018

Привет, я хочу сохранить словарь в CSV, а затем ввести его. Однако как на выходе, так и на входе я столкнулся с некоторыми проблемами.

Для вывода я попытался: (D_FINAL это словарь)

f = open("D_FINAL.csv", "w")
writer = csv.writer(f)
for k, v in D_FINAL.items():
    writer.writerow([k, v])
f.close

Работает нормально, но когда я хочу открыть CSV, он говорит, что файл заблокирован от редактирования

Для ввода я попытался

import csv
dict = {}
r = open('D_FINAL3.csv', 'r')
for k, v in csv.reader(r):
    dict[k] = v

r.close()

но я получил ошибку

ValueError                                Traceback (most recent call last)
<ipython-input-92-d3e2b3081317> in <module>()
      3 dict = {}
      4 r = open('D_FINAL2.csv', 'r')
----> 5 for k, v in csv.reader(r):
      6     dict[k] = v
      7     
ValueError: not enough values to unpack 
(expected 2, got 0)

Какой правильный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Глядя на код, который вы дали, кажется, что вы на самом деле не закрываете файл, вызывая f.close(). Изменение f.close на f.close() должно помочь вам решить эту проблему. Но помните, что вы можете улучшить свой код, реализовав блок with. например,

with open("D_FINAL.csv", "w",newline="") as f:
    writer = csv.writer(f)
    for k, v in D_FINAL.items():
        writer.writerow([k, v])
0 голосов
/ 28 августа 2018

Может быть, вы можете использовать pandas для этой цели

import pandas as pd
pd.DataFrame.from_dict(data=D_FINAL, orient='index').to_csv('D_FINAL.csv')

Надеюсь, это поможет.

0 голосов
/ 28 августа 2018

в windows (python 3), если вы не используете open("D_FINAL.csv", "w",newline=""), в результирующем csv-файле будут лишние пустые строки (из-за вставленного дополнительного символа возврата каретки, заканчивающегося такими строками, как \r\r\n).

К сожалению, эти двойные символы возврата каретки читаются не одинаково: она генерирует пустую строку после каждой действительной строки данных. Таким образом, распаковка не удалась, потому что в строке нет элементов.

Подробнее об этом неприятном побочном эффекте: Файл CSV, написанный на Python, содержит пустые строки между каждой строкой

Таким образом, при чтении вы получаете пустую строку.

Просто сделайте (и улучшите свои навыки Python на ступеньку выше):

with open("D_FINAL.csv", "w", newline="")  as f:  # python 2: use: "wb"
    writer = csv.writer(f)
    writer.writerows(D_FINAL.items())

(написать за один раз с writerows, использовать блок with, чтобы вы не пропустили вызов close и файл больше не блокировался)

Обратите внимание, что модуль json лучше всего подходит для чтения и записи словарей (если вам нужна сериализация)

В сторону: лучше читать обратно, используя лучшую технику (кажется, что newline вещь действительно не нужна при чтении):

with open("D_FINAL.csv", "r", newline="")  as f:  # python 2: use: "rb"
    writer = csv.reader(f)
    output = {k:v for k,v in writer}  # unpack+dictionary comprehension
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...