Вы пишете данные в одну ячейку вместо того, чтобы правильно распределить их по столбцам. Как можно исправить код, чтобы данные записывались в соответствующие колонки 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)