@SITihomirov
Студент 3-го курса Прикладной информатики

Не могу передать строку в writerow, что не так?

Консоль выкидывает ошибку TypeError: string indices must be integers, при попытке передачи построчно
for i in range(j, len(property)):
  k = j
  write_to_csv(property[k])
  k += 1
j = len(property)

Полный текст ошибки :
Traceback (most recent call last):
File "C:/Users/Danis/PycharmProjects/parser/parser_cian.py", line 116, in
get_offices(url)
File "C:/Users/Danis/PycharmProjects/parser/parser_cian.py", line 71, in get_offices
write_to_csv(property[k])
File "C:/Users/Danis/PycharmProjects/parser/parser_cian.py", line 82, in write_to_csv
a_pan.writerow((building['адрес'], building['площадь'], building['цена'], building['цена за м²'],
TypeError: string indices must be integers

def write_to_csv(property):
    with open('cian_parser.csv', 'a', encoding='utf8', newline='') as file:
        a_pan = csv.writer(file, delimiter=',')
        for building in property:
            a_pan.writerow((building['адрес'], building['площадь'], building['цена'], building['цена за м²'],
                            building['ссылка'], building['дата выгрузки']))
    read_file = pd.read_csv(r'cian_parser.csv')
    read_file.to_excel(r'cian_parser.xlsx', index=None, header=True)
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
@SITihomirov Автор вопроса
Студент 3-го курса Прикладной информатики
Разобрался, цикл был не нужен.
Меняем
def write_to_csv(property):
    with open('cian_parser.csv', 'a', encoding='utf8', newline='') as file:
     #...

на
def write_to_csv(property):
    with open('cian_parser.csv', 'w', encoding='utf8', newline='') as file:
    #...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вот это кошмар...
Нагромождение каких-то ненужных приседаний и реверансов. Склажывается ощущение. что код писался вообще без понимания что и как работает.
Тут проще пересчитать строки, которые не требовалось бы исправить: ноль таких строк.
Вы бы привели хоть пример что у вас там в property подается. А-то на кофейной гуще гадать приходится какая из сотни ошибок-таки окончательно стедала неработоспособным код.

Вот здесь вообще какая-то ерунда:
for i in range(j, len(property)):
    k = j
    write_to_csv(property[k])
    k += 1
  j = len(property)

Ладно, с отступами беда. Но зачем эти бессмысленные присвоения? Зачем этот бессмысленный цикл, если вы в нем обрабатываете один и тот же элемент много раз?
Прекращайте уже такое писать. Смысла нет. Не ваше.

Похоже (разводы гущи так подсказывают за неимением других данных) вы не понимаете что передаёте в эту свою функцию. Ситуацию бы прояснила публикаия содержимого переменной roperty
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы