@abdullokh_apo

Как заполнять csv файл в зависимости от количества данных?

Добрый день! Есть скрипт, который парсит данные с сайта и сохраняет их в csv. Данные с сайта разные. И поэтому нет определенного кол-ва столбцов. Хочется чтобы столбцы автоматически добавлялись.
Например:
add_row({'name': 'John', 'surname': 'Smith'})
64b4819d97adf719771720.png
Затем:
add_row({'name': 'Alex', 'surname': 'Jackson', 'age': '23'})

И получалось:
64b482477bb9e803180901.png

Пока написал
import csv

def add_column(column):
    with open('names.csv', 'r+', newline='') as csvfile:
        writer = csv.writer(csvfile)
        reader = csv.reader(csvfile)

        all = []
        row = next(reader)
        row.append(column)
        all.append(row)

        for row in reader:
            row.append('')
            all.append(row)

        filename = "names.csv"
        f = open(filename, "w+")
        f.close()
        writer.writerows(all)

Функция добавляет новую колонку с пустыми значениями для всех строк. Но срабатывает один раз. В след. раз пишет
_csv.Error: line contains NUL

Подскажите как реализовать подобную функцию.
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
А не нужно пытаться из csv файла делать электронную таблицу. У тебя должны быть известны все имена столбцов. И создан csv, со всеми столбцами, а затем ты в него добавляешь записи в которых определенные значения будут None, по скольку значение не спарсено для данного элемента записи.

для записи в csv используй pandas. Создай датафрейм со всеми возможными столбцами. Затем у тебя есть коллекция с записями, ну например список с кортежами, где каждый кортеж это запись, содержащая None, где данные не спарсены.
Псевдо код будет такой (индексы в кортеже должны совпадать с индексами в columns)
data = [('Ivanov','Ivan',None), ('Petrov','Petr',30),...,('Sidorov',None,None)]
columns = ['name','surname',...'age']
df = pd.DataFrame(data, columns = columns)
df.to_csv('result.csv',header=False, mode='a')
Создаешь фрейм, и добавляешь его новыми строчками в существующий csv файл. А автоматически добавлять столбцы в csv файл не нужно. Если же знать наперед все потенциальные имена столбцов не возможно, что я себе слабо представляю (ты должен знать что ты хочешь спарсить), то используй json (мороки будет много).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы