CSV Writer пишет над собой - PullRequest
       5

CSV Writer пишет над собой

1 голос
/ 28 сентября 2011

Я пытаюсь создать файл CSV со списком URL-адресов.

Я довольно новичок в программировании, поэтому прошу прощения за любой неаккуратный код.

У меня есть цикл, который проходит черезсписок мест, где можно получить список URL.

У меня есть цикл в этом цикле, который экспортирует данные в файл CSV.

import urllib, csv, re
from BeautifulSoup import BeautifulSoup
list_of_URLs = csv.reader(open("file_location_for_URLs_to_parse"))
for row in list_of_URLs:
    row_string = "".join(row)
    file = urllib.urlopen(row_string)
    page_HTML = file.read()
    soup = BeautifulSoup(page_HTML) # parsing HTML
    Thumbnail_image = soup.findAll("div", {"class": "remositorythumbnail"})
    Thumbnail_image_string = str(Thumbnail_image)
    soup_3 = BeautifulSoup(Thumbnail_image_string)
    Thumbnail_image_URL = soup_3.findAll('a', attrs={'href': re.compile("^http://")})

Это частьэто не работает для меня:

    out  = csv.writer(open("file_location", "wb"), delimiter=";")
    for tag in soup_3.findAll('a', href=True):   
        out.writerow(tag['href'])

По сути, писатель продолжает писать поверх себя, есть ли способ перейти к первой пустой строке в CSV и начать писать

Ответы [ 3 ]

4 голосов
/ 28 сентября 2011

Не помещайте это в любой цикл:

out  = csv.writer(open("file_location", "wb"), delimiter=";")

Вместо этого:

with open("file_location", "wb") as fout:
    out = csv.writer(fout, delimiter=";")
    # put for-loop here

Примечания:

  1. open("file_location", "wb") создает новый файл, уничтожив любой старый файл с тем же именем.Вот почему, похоже, писатель перезаписывает старые строки.
  2. Используйте with open(...) as ..., потому что он автоматически закрывает файл для вас, когда заканчивается with-block.Это делает явным, когда файл закрыт.В противном случае файл остается открытым (и, возможно, не полностью очищенным) до тех пор, пока out не будет удален или переназначен на новое значение.Это не совсем ваша главная проблема, но использование with слишком полезно, чтобы не упоминать.
1 голос
/ 28 сентября 2011

Вы закрываете файл после каждой записи или открываете файл перед каждой записью?Просто проверьте это.
Также попробуйте использовать режим "ab" вместо "wb".«ab» добавит в файл.

0 голосов
/ 28 сентября 2011

Вызов open("file_location", "wb"), который вы делаете один раз для каждого URL, стирает то, что вы делали с этим файлом ранее. Переместите его за пределы цикла for, чтобы он открывался только один раз для всех URL-адресов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...