@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

Подскажите как реализовать подобную функцию.
  • Вопрос задан
  • 116 просмотров
Решения вопроса 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 (мороки будет много).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы