Импорт CSV - Запись данных в файл из словаря - Ошибка - PullRequest
1 голос
/ 15 марта 2019

Я новичок в Python. Я пытаюсь записать некоторые данные в файл CSV. Я хочу записать в файл из словаря в Python

def write_info(self):
        fname='userinfo.csv'
        field_names = ['Username', 'Password']
        with open(fname, 'w') as op_file:
            op_writer = csv.DictWriter(op_file, fieldnames=field_names)
            op_writer.writeheader()
            **for row in self.user_dict:
                op_writer.writerow(row)**

Можете ли вы, ребята, сказать мне, как читать словарь и записать его в файл. Когда я печатаю словарь self.user_dict, я вижу значения.

Когда я вижу

**for row in self.user_dict:
                op_writer.writerow(row)**

и я получаю ошибку.

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-44-e1069dd9aafc> in <module>()
     28 
     29 # writing to file
---> 30 auth.write_info()

<ipython-input-44-e1069dd9aafc> in write_info(self)
     17             op_writer.writeheader()
     18             for row in self.user_dict:
---> 19                 op_writer.writerow(row)
     20 
     21        # fill in your code

~\AppData\Local\Continuum\anaconda3\lib\csv.py in writerow(self, rowdict)
    153 
    154     def writerow(self, rowdict):
--> 155         return self.writer.writerow(self._dict_to_list(rowdict))
    156 
    157     def writerows(self, rowdicts):

~\AppData\Local\Continuum\anaconda3\lib\csv.py in _dict_to_list(self, rowdict)
    146     def _dict_to_list(self, rowdict):
    147         if self.extrasaction == "raise":
--> 148             wrong_fields = rowdict.keys() - self.fieldnames
    149             if wrong_fields:
    150                 raise ValueError("dict contains fields not in fieldnames: "

**AttributeError: 'str' object has no attribute 'keys'**

1 Ответ

1 голос
/ 15 марта 2019

self.user_dict переменная не содержит диктовку.

Как вам нужно, user_dict должен быть списком диктов.

user_dict = []
user_dict.append({'username': 'joe', 'password': 'test'})
user_dict.append({'username': 'doe', 'password': 'test'})
...