2015-10-06 2 views
0

Итак, вот моя проблема. Я создал словарь для своих списков и пытаюсь добавить данные, которые я нахожу, и добавлять их к каждой строке, но вместо этого он просто добавляется к тому же столбцу с тем же тип данных.Python CSV добавляет новую строку

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

data_dict = {'contact name': [], 'name': [], 'telephone': [], 'email': [], 
     'mobile': [], 'feedback average': []} 

try: 
     data_dict['telephone'].append(soup.find('span',itemprop='telephone').text) 
    except AttributeError: 
     data_dict['telephone'].append('No telephone') 

print data_dict 
field_names = fn = data_dict.keys() 
with open('./file.csv','w') as csvfile: 
    f = csv.DictWriter(csvfile, fieldnames=fn) 

    f.writeheader() 
    f.writerow(data_dict) 
+1

'DictWriter' ожидает список словарей, не словарь списков ... – jonrsharpe

+0

Как я мог тогда ожидать мои списков вместо этого? thx –

+2

https://docs.python.org/2/library/csv.html#csv.DictWriter – jonrsharpe

ответ

0

Попробуйте что-то вроде этого:

data_dict = {'contact name': [], 'name': [], 'telephone': [], 'email': [], 
    'mobile': [], 'feedback average': []} 

try: 
    data_dict['telephone'].append(soup.find('span',itemprop='telephone').text) 
except AttributeError: 
    data_dict['telephone'].append('No telephone') 

print data_dict 
fn = data_dict.keys() 
with open('./file.csv','w') as csvfile: 
    f = csv.reader(csvfile) 
    for row in f: 
     for i in len(fn): 
      data_dict[fn[i]].append(row[i]) 

Это должно работать для вас, если я вас правильно. Но заботитесь, это требует, чтобы одна строка в csv содержала точно элементы вашего словаря в правильном порядке.

Если это не так, вам нужно выяснить, какое значение написано в каком столбце, а затем добавить значение этого столбца в список в словаре.

Так что вам нужно будет заменить

for i in len(fn): 
    data_dict[fn[i]].append(row[i]) 

по

for k in fn: 
    data_dict[k].append(row[columns[k]]) 

где столбцы представляет собой словарь, который содержит те же ключи, как data_dict, и как значения столбцов, в которых данные из определенный ключ хранится в csv-файле. Для примера, столбцы могут выглядеть следующим образом:

columns = {'contact name': 1, 'name': 3, 'telephone' : 6, 'email': 7, 'mobile':8, 'feedback average': 2} 
Смежные вопросы