Python Многопоточность очистки, запись данных в CSV-файл - PullRequest
0 голосов
/ 11 октября 2019

Я использую многопроцессорный пул для умножения скорости очистки, и все в порядке, только я не понимаю, почему Python записывает каждые 30 строк заголовок моего CSV, я знаю, что есть ссылка с параметром пула, который я ввел, нокак можно исправить это поведение

def parse(url):

    dico = {i: '' for i in colonnes}

    r = requests.get("https://change.org" + url, headers=headers, timeout=10)
    # sleep(2)

    if r.status_code == 200:
        # I scrap my data here
        ...
        pprint(dico)
        writer.writerow(dico)
    return dico

with open(lang + '/petitions_' + lang + '.csv', 'a') as csvfile:
     writer = csv.DictWriter(csvfile, fieldnames= colonnes)
     writer.writeheader()
     with Pool(30) as p:
         p.map(parse, liens)

Кто-то может сказать, где поставить 'writer.writerow (dico)', чтобы избежать повторения заголовка? Спасибо

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Похоже, что "заголовок", на который вы ссылаетесь, происходит из строки writer.writeheader(), а не из строки writer.writerow().

Без полного фрагмента кода я могу только предположить, что у вас есть что-токак внешний цикл, который оборачивается вокруг блока with open. Таким образом, каждый раз, когда ваш код входит в блок with, печатается строка заголовка, а затем - 30 строк очищенных данных (из-за размера пула).

0 голосов
/ 11 октября 2019

Проверьте, существует ли файл:

os.path.isfile('mydirectory/myfile.csv')

Если он существует, не пишите заголовок снова. Создайте функцию (def ...) для заголовка и другую для данных.

...