io.TextIOWrapper обратно вместо текста при использовании file.open

#python #encoding

#питон #кодирование

Вопрос:

Новичок в Python, поэтому я уверен, что на этот вопрос есть мучительно очевидный ответ, но я не могу его найти.

Я пишу webscraper. Я получаю идеальный HTML обратно, когда я читаю файл вживую, вот так:

 user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
        headers={'User-Agent':user_agent,} 
        request=urllib.request.Request(URL,None,headers)
        response = urllib.request.urlopen(request)
        page_data = response.read()
 

Но если я сохраню этот HTML-код локально и попытаюсь открыть его с помощью file.open, я получу обратно <_io.TextIOWrapper name=’metacritic_main_html/0.html ‘mode=’r’ encoding=’US-ASCII’> вместо HTML. Я проверил сам файл, и HTML-код совершенно не поврежден, что заставляет меня думать, что я делаю что-то глупое, читая его обратно.

Вот этот код:

 files = os.listdir(file_dir)

for f in files:
    file_loc = file_dir   f
    print(file_loc)

    with open(file_loc) as html:
        print(html)
 

Результат этого последнего оператора печати — <_io.TextIOWrapper name=’metacritic_main_html/0.html ‘mode=’r’ encoding=’US-ASCII’>
, а не HTML, как я ожидал.

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

Комментарии:

1. Вы никогда не читали досье. Вызов переменной html не означает, что она волшебным образом будет содержать HTML-код, хранящийся в файле.

2. Конечно, я так не думал, я просто руководствовался контекстом. Как же мне тогда на самом деле читать содержимое файла?

3. html Переменная содержит io.TextIOWrapper (который является открытым файлом). Для чтения файла используйте html.read() . Смотрите документацию .

4. Hooboy. Спасибо @JohnAnderson — ранее я использовал синтаксический анализатор HTML, который обработал этот бит для меня. Исправлено!