#python #list #loops #for-loop
#python #Список #циклы #for-цикл
Вопрос:
Я пытаюсь выполнить итерацию строк файла. Но цикл for не сохраняет порядок. На самом деле это не случайно, каждый раз он следует тому же порядку, но не в правильном порядке. И иногда он переходит к одному и тому же индексу несколько раз. Чтобы лучше показывать, я добавил все индексы в список.
numbers = [ ]
html_file = 'page.pwc'
with open(html_file, "r ") as f:
html_text = f.readlines()
for line in html_text:
numbers.append(html_text.index(line))
#time.sleep(1)
print(numbers)
И это результат (я добавлю изображение для показа, так как оно довольно велико для копирования-вставки здесь)
В чем может быть причина этого? Я что-то простое упускаю? Может ли кто-нибудь еще попробовать тот же код и посмотреть, воспроизводим ли он? Для HTML-файла вы можете использовать HTML-код этого веб-сайта: http://example.com / . Он также дает тот же результат для меня, но с другим порядком.
Комментарии:
1. Похоже, что у вас повторяющиеся строки в HTML — первые 8 строк одинаковы, поэтому
html_text.index(line)
возвращает 0 для всех из них; затем 9-й и т.д. строки разные и так далее2. Пожалуйста, прочитайте
list.index
документы. Он всегда возвращает индекс первого найденного элемента3.
list.index(x)
вернет индекс на основе нуля в списке первого элемента, значение которого равно x. Есть необязательныеstart
end
параметры и . Какова ваша цель?4. Также обратите внимание, что чтение
html
файла построчно не имеет особого смысла.5. используйте
PageElement.decompose()
Page.Element.replace_with()
методы или. См . crummy.com/software/BeautifulSoup/bs4/doc/#decompose и crummy.com/software/BeautifulSoup/bs4/doc/#replace-with Если вам все еще нужна помощь — начните новый вопрос
Ответ №1:
Похоже, вам нужно enumerate
Пример:
numbers = [ ]
html_file = 'page.pwc'
with open(html_file, "r ") as f:
html_text = f.readlines()
for idx, line in enumerate(html_text):
numbers.append(idx)
print(numbers)
Комментарии:
1. почему бы и нет
list(range(len(html_text)))
? Я думаю, есть что-то еще, чтобы задать вопрос.