#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, и его наивысшее значение соответствует последнему элементу списка фильмов.
также у вас было слишком много новых строк, потому что вам нужна только одна новая строка на строку.
вероятно, можно было бы также записывать числа и названия фильмов отдельно, но тогда вам нужно будет указать, в какую строку файла вы записываете.