Недорогие способы добавить поиск к объекту типа файла - PullRequest
2 голосов
/ 16 апреля 2010

PdfFileReader читает содержимое из pdf-файла для создания объекта.

Я запрашиваю pdf из cdn через urllib.urlopen(), это дает мне файл как объект, который не ищет PdfFileReader, однако использует поиск.

Каков простой способ создания объекта PdfFileReader из файла PDF, загруженного через URL.

Теперь, что я могу сделать, чтобы избежать записи на диск и повторного чтения через file().

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 16 апреля 2010

Нет действительно недорогого, готового к использованию способа сделать это. Самый простой способ - прочитать все данные и поместить их в объект StringIO. Это, однако, требует, чтобы вы сначала прочитали все, что может или не может быть тем, что вы хотите.

Если вы хотите что-то, что читает только по мере необходимости, а затем сохраняет прочитанное (или, возможно, только часть прочитанного), вам придется написать это самостоятельно. Вы можете посмотреть исходный код модуля StringIO (или модуля io в Python 2.6) для некоторых примеров.

1 голос
/ 16 апреля 2010

Я подозреваю, что вы можете преждевременно оптимизировать здесь.

Большинство современных систем кэшируют файлы в памяти в течение значительного периода времени, прежде чем записать их на диск, поэтому, если вы записываете данные во временный файл, читаете их обратно, затем закрываете и удаляете файл, который может оказаться значительного дискового трафика нет (если только он не равен 100 МБ).

Возможно, вы захотите использовать tempfile.TemporaryFile(), который создает временный файл, который автоматически удаляется при закрытии, или tempfile.SpooledTemporaryFile(), который явно хранит все это в памяти, пока он не превысит определенный размер.

1 голос
/ 16 апреля 2010

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

...