Как записать .append результаты в CSV - PullRequest
1 голос
/ 04 мая 2019

Я отредактировал некоторый код Python для использования метода .append, что означает, что способ написания моего f.write() больше не будет работать (TypeError: can only concatenate list (not "str") to list).

Это часть скребка,который я проверил и могу распечатать.Перед тем как редактировать мой цикл для включения .append, я экспортировал в .csv следующую строку кода:

f.write(product_name + "," + product_number + "," + category + "\n")

Это больше не будет работать, и я не уверен, как его редактировать.Любая помощь будет принята с благодарностью.

Я отредактировал свой цикл так, чтобы он выглядел так:

containers = page_soup.findAll("tr",{"class":"products"})

product_name = []
product_number = []
category = []

for container in containers:
    product_name.append( container.a.text )
    product_number.append( container.div.text )
    category.append( container.select_one('td:nth-of-type(4)').text.strip() )

Мне кажется, я понимаю, что добавление метода .append означает, что я не могуиспользуйте подход f.write, показанный выше (список против строки, верно?).Когда я использую код f.write, показанный выше, я получаю "TypeError: can only concatenate list (not "str") to list", что, я думаю, я понимаю.

Я знаю, что мой цикл работает, потому что этот код выдает правильные результаты:

print("product_name:", product_name)
print("product_number:", product_number)
print("category: ", category)

Как мне теперь записать это в .csv?

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

Чтобы не повторять элементы дважды, вы можете просто записать в файл в цикле for:

product_names = []
product_numbers = []
categories = []

with open('file.csv','w') as f:
    for container in containers:
            product_name = container.a.text
            product_number = container.div.text
            category =  container.select_one('td:nth-of-type(4)').text.strip() 

            product_names.append(product_name)
            product_numbers.append(product_number)
            categories.append(category)

            f.write(product_name + "," + product_number + "," + category + "\n")

Возможно, вы также захотите использовать модуль csv для записи строк вфайл вместо того, чтобы вручную использовать конкатенацию строк для создания строк:

import csv

with open('file.csv','w') as f:
    csv_out = csv.writer(f)
    for container in containers:
            #...same as above...

            csv_out.writerow([product_name, product_number, category])
1 голос
/ 04 мая 2019

Так же, как и раньше, просто сделайте это после установления полного содержимого product_name, product_number и category и делайте это по одной строке за раз:

items = zip(product_name, product_number, category)  # zip these three lists into a single 2D list
with open("my_file.csv", 'w') as f:
    for item in items:
        f.write(f"{item[0]},{item[1]},{item[2]}\n")

Вы можетеТакже изучите возможность использования библиотеки csv, если вам нужно что-то более сложное, чем это.

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