@vladimirstrokov

Как записать Словарь в CSV по столбцам в Python?

Сейчас записывает данные в одну ячейку, а не по столбцам.
import csv
import os

# Данные из переменной 'a'
a = {
    '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'
}

# Имя CSV файла
filename = 'data3.csv'

# Проверка, существует ли файл
file_exists = os.path.isfile(filename)

# Открываем файл в режиме добавления (append) с возможностью чтения (a+)
with open(filename, mode='a+', newline='', encoding='utf-8') as file:
    # Создаем объект writer для записи данных в CSV
    writer = csv.DictWriter(file, fieldnames=a.keys())
    
    # Если файл пустой или только что создан, записываем заголовки
    if not file_exists or file.tell() == 0:
        writer.writeheader()  # Записываем заголовки (названия столбцов)
    
    # Записываем строку данных (содержимое столбцов)
    writer.writerow(a)
  • Вопрос задан
  • 310 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
У меня ваш код работает отлично. Создает 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)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 17:47
7000 руб./за проект
21 нояб. 2024, в 17:30
1500 руб./за проект
21 нояб. 2024, в 17:22
7000 руб./за проект