Пустой файл CSV при записи большого количества данных

1

В настоящее время я выполняю проект очистки данных с помощью Python 3 и пытаюсь записать скребковые данные в файл CSV. Мой текущий процесс:

import csv

outputFile = csv.writer(open('myFilepath', 'w'))
outputFile.writerow(['header1', 'header2'...])
for each in data:
     scrapedData = scrap(each)
     outputFile.writerow([scrapedData.get('header1', 'header 1 NA'), ...])

Однако, как только этот скрипт закончен, CSV файл пуст. Если я просто запустил:

import csv

outputFile = csv.writer(open('myFilepath', 'w'))
outputFile.writerow(['header1', 'header2'...])

создается CSV файл, содержащий заголовки:

header1,header2,..

Если я просто очищу 1 в data, например:

outputFile.writerow(['header1', 'header2'...])
scrapedData = scrap(data[0])
outputFile.writerow([scrapedData.get('header1', 'header 1 NA'), ...])

будет создан CSV файл, включающий как заголовки, так и данные для data[0]:

header1,header2,..
header1 data for data[0], header1 data for data[0]

Почему это так?

  • 1
    Попробуйте использовать менеджер контекста. Вы никогда не закрываете свой файл, поэтому он может не сбрасываться. В любом случае, при работе с файлами всегда следует использовать менеджер контекста.
  • 0
    Вы должны закрыть файл после того, как закончите писать в него.
Теги:
csv
export-to-csv

2 ответа

2
Лучший ответ

Когда вы открываете файл с w, он удаляет предыдущие данные

Из документов

w: открыть для записи, сначала обрезать файл

Поэтому, когда вы открываете файл после записи данных scrape с помощью w, вы просто получаете пустой файл, а затем записываете заголовок на нем, чтобы вы видели только заголовок. Попробуйте заменить w на a. Таким образом, новый вызов для открытия файла будет выглядеть так:

outputFile = csv.writer(open('myFilepath', 'a'))

Вы можете узнать больше о режимах, чтобы открыть файл здесь.

Ссылка: Как вы добавляете файл?

Редактировать после комментария DYZ:

Вы также должны закрыть файл после завершения добавления. Я бы предложил использовать файл как:

with open('path/to/file', 'a') as file:
    outputFile = csv.writer(file)
    # Do your work with the file

Таким образом, вам не нужно беспокоиться о том, чтобы закрыть его. Как только код существует with блоком, файл будет закрыт.

  • 0
    ОП не добавляется в файл. Они открывают это только один раз. Проблема в том, что они не закрывают файл.
  • 0
    Я обновлю ответ. Хороший улов. OP по-прежнему должен использовать правильный режим, в противном случае проблема все еще существует.
0

Я бы использовал Pandas для этого:

import pandas as pd
headers = ['header1', 'header2', ...]
scraped_df = pd.DataFrame(data, columns=headers)
scraped_df.to_csv('filepath.csv')

Здесь я предполагаю, что ваш объект data - это список списков.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню