簡體   English   中英

如何使用urllib2將此代碼更新為Python3?

[英]How can I update this code using urllib2 to Python3?

我現在的教授在課堂上使用Python 2.7作為示例,但是將來我將要上課的其他教授都建議我使用Python 3.5。 我正在嘗試將當前教授的示例從2.7轉換為3.5。 現在,我遇到了urllib2軟件包的問題,​​據了解,該問題已在Python 3中拆分。

iPython筆記本中的原始代碼如下所示:

import csv
import urllib2

data_url = 'http://archive.ics.uci.edu/ml/machine-learning-    databases/adult/adult.data'
response = urllib2.urlopen(data_url)

myreader = csv.reader(response)
for i in range(5):
    row = next(myreader)
   print ','.join(row)

我已將其轉換為:

import csv
import urllib.request

data_url = 'http://archive.ics.uci.edu/ml/machine-learning-  databases/adult/adult.data'
response = urllib.request.urlopen(data_url)
myreader = csv.reader(response)
for i in range(5):
    row = next(myreader)
    print(','.join(row))

但這給我留下了錯誤:

Error                                     Traceback (most recent call last)
<ipython-input-19-20da479e256f> in <module>()
      7 myreader = csv.reader(response)
      8 for i in range(5):
----> 9     row = next(myreader)
     10     print(','.join(row))

Error: iterator should return strings, not bytes (did you open the file in text mode?)

我不確定如何從這里繼續。 有任何想法嗎?

用另一個迭代器包裝response ,該迭代器將字節解碼為字符串並產生字符串:

import csv
import urllib.request

def decode_iter(it):
    # iterate line by line
    for line in it:
        # convert bytes to string  using `bytes.decode`
        yield line.decode()

data_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data'
response = urllib.request.urlopen(data_url)
myreader = csv.reader(decode_iter(response))
for i in range(5):
    row = next(myreader)
    print(','.join(row))

更新

取而代之的decode_iter ,您可以使用codecs.iter_decode

import csv
import codecs
import urllib.request

data_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data'
response = urllib.request.urlopen(data_url)
myreader = csv.reader(codecs.iterdecode(response, 'utf-8'))
for i in range(5):
    row = next(myreader)
    print(','.join(row))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM