Вы пишете данные в одну ячейку вместо того, чтобы правильно распределить их по столбцам. Как можно исправить код, чтобы данные записывались в соответствующие колонки CSV файла?
Чтобы сохранить словарь в формате CSV по столбцам, вам нужно убедиться, что структура словаря соответствует необходимому формату для записи в CSV. Наиболее распространенный способ представления данных в CSV — это использование списка словарей, где каждый словарь представляет собой строку в таблице, а ключи словаря — названия столбцов.
Пример словаря, который можно записать в CSV:
```python
data = [
{'name': 'Alice', 'age': 30, 'city': 'New York'},
{'name': 'Bob', 'age': 25, 'city': 'Los Angeles'},
{'name': 'Charlie', 'age': 35, 'city': 'Chicago'}
]
```
Чтобы сохранить этот словарь в формате CSV, вы можете использовать модуль `csv`. Вот пример кода:
```python
import csv
data = [
{'name': 'Alice', 'age': 30, 'city': 'New York'},
{'name': 'Bob', 'age': 25, 'city': 'Los Angeles'},
{'name': 'Charlie', 'age': 35, 'city': 'Chicago'}
]
# Укажите имя файла, в который будете записывать данные
filename = 'output.csv'
# Открываем файл в режиме записи
with open(filename, mode='w', newline='') as csv_file:
fieldnames = data[0].keys() # Получаем названия столбцов из первого словаря
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader() # Записываем заголовки столбцов
for row in data:
writer.writerow(row) # Записываем каждую строку
print(f'Data saved to {filename}')
```
Этот код создаст файл `output.csv`, в котором данные будут правильно распределены по столбцам. Обратите внимание на использование `DictWriter`, который позволяет нам записывать словари непосредственно в CSV формат.
У меня ваш код работает отлично. Создает csv с разделителями запятыми, корректно открывающийся в стороннем приложении (например, Numbers на macos).
Возможно, вам хотелось сделать csv с табуляциями - используйте параметр dialect (описан в документации к библиотеке csv).
Вот я чуток переделал для примера:
import csv import os from pathlib import Path # Данные из переменной 'a' my_row = { 'url': 'https://www.coindesk.com/policy/2024/08/08/ftx-alameda-ordered-to-pay-127b-to-creditors-by-us-judge/', 'title': 'FTX, Alameda Ordered to Pay $12.7B to Creditors by U.S. Judge', 'author': 'Shaurya Malwa', 'date': 'Aug 8, 2024 at 6:44 a.m. UTC' } # делаю три строчки для примера массива. data = [my_row] * 3 # Имя CSV файла dir_path = Path(os.path.dirname(os.path.realpath(__file__))) pathname = dir_path / 'data' if not pathname.exists(): os.mkdir(pathname) filename = pathname / 'data3.csv' # Открываем файл в режиме добавления (append) с возможностью чтения (a+) with open(filename, mode='a+', newline='', encoding='utf-8') as file: # Создаем объект writer для записи данных в CSV writer = csv.DictWriter(file, fieldnames=data[0].keys(), dialect='excel-tab') # Если файл пустой или только что создан, записываем заголовки if not filename.exists() or file.tell() == 0: writer.writeheader() # Записываем заголовки (названия столбцов) # Записываем строки данных (содержимое столбцов) for row in data: writer.writerow(row)