#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
onreadlines
для получения содержимого файла?4. Вызов
.read()
не считывает все данные. Вы должны продолжать вызывать его, чтобы получить все данные. Пожалуйста, поделитесь некоторым кодом.5. Есть предложения, каким кодом я должен поделиться? Я не могу выполнить вызов, который возвращает fileobject, потому что он не будет работать из-за аутентификации. Я думал
.read()
, что прочитал все данные, если я вызову его снова несколько раз, он ничего не вернет. (Интересно"".join(f.readlines())
, что возвращает точноMZ
так же, как.read()
и делает.)
Ответ №1:
Я обнаружил, что проблема заключалась в том, что я запускал код внутри PyScripter, а встроенный интерпретатор python завершает нулевые байты на выходе. Таким образом, с моим кодом не было проблем, если я запускаю его вне PyScripter, все работает нормально. Теперь запускаю Wing IDE и никогда не оглядываюсь назад 🙂