чтение () останавливается после нулевого символа

#python #nul

#python #nul

Вопрос:

Я загружаю файлы по протоколу HTTPS, запрашиваю файлы через urllib2.Request , и они возвращаются как socket._fileobject . В идеале я бы хотел передать это в файл, чтобы избежать загрузки его в память, но я не уверен, как это сделать.

Моя проблема в том, что если я вызываю .read() объект, он возвращает только все данные до первого символа NUL и не считывает весь файл. Как я могу это решить?

Символ NUL опускается, как x00 будто это какая-то помощь, не уверен, что это за кодировка

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

1. Возможно, вам следует проверить, разрешены ли данные после X00 в протоколе. Вы пробовали какую-нибудь другую библиотеку, например, curl в python pycurl.sourceforge.net .

2. .read() Метод в целом не заботится о байтах NUL. Можете ли вы показать нам свой код и некоторые примеры ввода, которые вызывают проблему?

3. Ну, не так просто, потому что файл поступает с сервера, который требует аутентификации. Как ни странно .readlines() , весь файл получает в виде списка, разделенного n символами, как и ожидалось, но read() просто возвращается MZ , когда начинается файл MZ ÿÿ , где пробел равен нулевым байтам. Почему не read работает, где readlines работает? Должен ли я просто использовать "".join on readlines для получения содержимого файла?

4. Вызов .read() не считывает все данные. Вы должны продолжать вызывать его, чтобы получить все данные. Пожалуйста, поделитесь некоторым кодом.

5. Есть предложения, каким кодом я должен поделиться? Я не могу выполнить вызов, который возвращает fileobject, потому что он не будет работать из-за аутентификации. Я думал .read() , что прочитал все данные, если я вызову его снова несколько раз, он ничего не вернет. (Интересно "".join(f.readlines()) , что возвращает точно MZ так же, как .read() и делает.)

Ответ №1:

Я обнаружил, что проблема заключалась в том, что я запускал код внутри PyScripter, а встроенный интерпретатор python завершает нулевые байты на выходе. Таким образом, с моим кодом не было проблем, если я запускаю его вне PyScripter, все работает нормально. Теперь запускаю Wing IDE и никогда не оглядываюсь назад 🙂