Apabila mencipta atur cara yang berinteraksi dengan Internet, sering kali perlu memuat turun fail daripada pelayan web. Dalam Python 3, terdapat pelbagai cara untuk menyelesaikan tugas ini.
Kod yang diberikan pada mulanya menghadapi ralat kerana fungsi menjangkakan jenis bait untuk argumen URL, tetapi yang diekstrak URL daripada fail JAD ialah rentetan. Untuk memuat turun fail apabila URL disimpan sebagai rentetan, tukarkannya kepada jenis bait menggunakan pengekodan UTF-8:
<code class="python">import urllib.request def downloadFile(URL=None): h = urllib.request.urlopen(URL.encode('utf-8')) return h.read() downloadFile(URL_from_file)</code>
Terdapat beberapa kaedah alternatif untuk muat turun fail daripada web:
urllib.request.urlopen: Dapatkan kandungan halaman web dengan membaca respons urlopen:
<code class="python">response = urllib.request.urlopen(URL) data = response.read() # a `bytes` object text = data.decode('utf-8') # a `str`</code>
urllib.request.urlretrieve: Muat turun dan simpan fail secara setempat:
<code class="python">urllib.request.urlretrieve(URL, file_name)</code>
urllib.request. urlopen shutil.copyfileobj: Tawarkan pendekatan yang sangat disyorkan dan paling betul untuk memuat turun fail:
<code class="python">with urllib.request.urlopen(URL) as response, open(file_name, 'wb') as out_file: shutil.copyfileobj(response, out_file)</code>
urllib.request.urlopen write to bytes object: Pilihan yang lebih ringkas, tetapi disyorkan hanya untuk fail kecil:
<code class="python">with urllib.request.urlopen(URL) as response, open(file_name, 'wb') as out_file: data = response.read() # a `bytes` object out_file.write(data)</code>
Akhir sekali, pengekstrakan data mampat secara on-the-fly juga mungkin:
<code class="python">url = 'http://example.com/something.gz' with urllib.request.urlopen(url) as response: with gzip.GzipFile(fileobj=response) as uncompressed: file_header = uncompressed.read(64) # a `bytes` object</code>
Atas ialah kandungan terperinci Bagaimana untuk Muat Turun Fail dari Web dalam Python 3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!