2015-11-27 3 views
-1

В настоящее время я провожу неделю в месте с очень неисправным интернет-сервисом, одновременно пытаясь очистить данные онлайн для проекта. В частности, я посещаю каждый URL-адрес из списка URL-адресов и соскабливая определенную часть данных с каждого веб-сайта, чтобы вставить в CSV-файл. Список URL-адресов довольно велик (33 000+ URL-адресов), и мне трудно найти, где я остановился, когда Интернет опустится. Есть ли способ сделать это быстро? Вот что у меня есть:Как написать строки в текстовый файл после определенной строки #?

def makeCSV(csv_src): 
#END_TOKEN = " __END__ENTRY__" 
with open(new_src, 'r') as f, open(csv_src, 'a') as fcsv: 
    count = 40 
    for i, url in enumerate(f): 
     while i >= count and count < len(f.readlines()): 
      count += 1 
      wr = csv.writer(fcsv, quoting=csv.QUOTE_ALL) 
      speaking, studying, entry, incorrect, correct = mineLearnerData(url) 
      data = [speaking, studying, incorrect, correct] 
      wr.writerow(data) 
      #f2.write(str(entry + END_TOKEN) + '\n') 
      print(count) 
f.close(); fcsv.close() 

'f' представляет файл URL, который я использую. Я отправляю определенную информацию из URL-адресов этого файла в указанный путь к файлу CSV. «Count» представляет следующий URL-адрес для просмотра. В идеале я также хотел бы использовать что-то линейное len (fcsv.readlines()), но я продолжаю получать ошибки ascii.

Кроме того, я открыт для предложений относительно эффективных способов сделать это, так как я совершенно не знаком с процессом сбора данных &.

+0

Иногда проще читать все строки в памяти, добавлять новые строки и записывать все строки в файл. – furas

ответ

0

Do не invoke f.readlines() не один раз.

CSV не подходит для модификация. Его следует использовать только для импорта/экспорта данных.

Для вашего случая использования я бы использовал легкий в работе db, такой как sqlite3, который обеспечивает транзакции и восстановление после сбоя.

Смежные вопросы