Вы пишете данные в одну ячейку вместо того, чтобы правильно распределить их по столбцам. Как можно исправить код, чтобы данные записывались в соответствующие колонки 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). <br/> <br/> Возможно, вам хотелось сделать csv с табуляциями - используйте параметр dialect (описан в документации к библиотеке csv). <br/> Вот я чуток переделал для примера: <br/> <pre><code class="python">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)</code></pre>