2016-08-02 2 views
1

Я хочу загрузить файл по HTTP, но все примеры онлайн включают сбор данных и их размещение в локальном файле. Проблема заключается в том, что вам нужно явно указать тип файла локального файла.Python - Загрузите файл через HTTP и автоматически определите тип файла

Я хочу загрузить файл, но я не буду знать тип файла того, что я загружаю.

Это то, что я в настоящее время:

urllib.urlretrieve(fetch_url,output.csv) 

Но если загрузить, скажем, XML файл будет CSV. Есть ли все равно, чтобы получить python для обнаружения файла, который я получаю от URL-адреса, например: http://asassaassa.com/assaas?abc=123

Скажите, что приведенный выше URL-адрес дает мне XML. Я хочу, чтобы python обнаружил это.

+0

У вас есть контроль над сервером? Как и в случае, разрешает ли сервер запрашивать или задавать тип файла для загрузки? Такого понятия, как «определение типа файла», не существует, кроме того, что он пытается проанализировать файл как несколько форматов или ищет определенный формат заголовка. Обычно URL-адрес загрузки включает расширение файла, что является простым способом определения типа файла. –

ответ

2

Вы можете использовать python-magic для определения типа файла. Он может быть установлен через «pip install python-magic».

Я предполагаю, что вы используете python 2.7, поскольку вы вызываете urlretreieve. Пример ориентирован на 2,7, но он легко адаптируется.

Это рабочий пример:

import mimetypes # Detects mimetype 
import magic # Uses magic numbers to detect file type, and does so much better than the built in mimetypes 
import urllib # Your library 
import os  # for renaming your file 
mime = magic.Magic(mime=True) 
output = "output" # Your file name without extension 
urllib.urlretrieve("https://docs.python.org/3.0/library/mimetypes.html", output) # This is just an example url 
mimes = mime.from_file(output) # Get mime type 
ext = mimetypes.guess_all_extensions(mimes)[0] # Guess extension 
os.rename(output, output+ext) # Rename file 
Смежные вопросы