2016-08-02 49 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

你有沒有對服務器的控制?如在中,服務器允許您查詢或設置文件類型下載?除了嘗試將文件解析爲多種格式或尋找特定的頭文件格式外,真的沒有像通用的「文件類型檢測」這樣的東西。通常,下載網址將包含文件擴展名,這是確定文件類型的簡單方法。 –

回答

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