Изменение формата csv в Python

#python #arrays #csv #web-scraping #beautifulsoup

#python #массивы #csv #веб-очистка #beautifulsoup

Вопрос:

Я пытался сделать все возможное, чтобы решить эту проблему, названия фильмов просто не будут перемещаться вверх. Проблема во 2-м блоке цикла for.. Это функция, которую я написал.

 def writeFile(filename, movie_titles):
    with open(filename, 'w') as f:
        headers = "No., Titlen"
        f.write(headers)
        i = 0
    
        for title in movie_titles:
            while i < len(movie_titles[0:]): i = i   1; f.write(str(i)   'n')
            f.write(', '  "%sn" % title.replace(',', '')   'n')
        f.close()
  

Это изображение того, как выглядит предварительный просмотр

Ответ №1:

В другом ответе есть более простой и питонический метод, но для вашего конкретного кода это решило бы проблему:

 def writeFile(filename, movie_titles):
    with open(filename, 'w') as f:
        headers = "No., Titlen"
        f.write(headers)
        i = 0
    
        for title in movie_titles:
            i = i   1
            f.write(str(i)   ', '  "%sn" % title.replace(',', '')   'n')
  

Обратите внимание, что финал f.close() не нужен. with Команда позаботится об этом.

Ответ №2:

Вы можете использовать enumerate() цикл for для получения индекса. Например:

 def writeFile(filename, movie_titles):
    with open(filename, 'w') as f:
        f.write("No., Titlen")

        for i, title in enumerate(movie_titles, 1):
            f.write('{},{}n'.format(i, title.replace(',', '')))
  

Примечание: Для создания файла CSV посмотрите на csv module .

Ответ №3:

Вы немного перепутали свои циклы. ваш код переходит в цикл for и перебирает все фильмы, во время первой итерации он выполняет цикл while, и только после этого цикл for продолжается. Я бы предложил что-то вроде этого:

 def writeFile(filename, movie_titles):
with open(filename, 'w') as f:
    headers = "No., Titlen"
    f.write(headers)
    i = 0

    for i in range(len(movie_titles)):
        f.write(str(i 1)   ',')
        f.write("%sn" % movie_titles[i].replace(',', ''))
    f.close()
  

цикл for перебирает все числа от 0 до длины списка фильмов — 1
, затем записывается число, здесь вы добавляете 1, чтобы ваш список начинался с 1
, после чего вы пишете название своего фильма. я предположил, что ваша переменная movielist представляет собой список, и поэтому вы можете индексировать этот список по list[index], этот индекс в нашем случае равен i, и его наивысшее значение соответствует последнему элементу списка фильмов.
также у вас было слишком много новых строк, потому что вам нужна только одна новая строка на строку.

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