作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Requests 模块进行授权,然后从 Web API 中提取 csv 内容,并让它在 Python 2.7 中运行良好。我现在想在 Python 3.5 中编写相同的脚本,但遇到了一些问题:
"iterator should return strings, not bytes (did you open the file in text mode?)"
requests.get
似乎返回字节而不是字符串,这似乎与迁移到 Python 3.x 时出现的编码问题有关。错误在最后一行的第 3 行引发:
next(reader)
.在 Python 2.7 中这不是问题,因为 csv 函数在
'wb'
中处理。模式。
countries = ['UK','US','CA']
datelist = [1,2,3,4]
baseurl = 'https://somewebsite.com/exporttoCSV.php'
#--- For all date/cc combinations
for cc in countries:
for d in datelist:
#---Build API String with variables
url = (baseurl + '?data=chart&output=csv' +
'&dataset=' + d +
'&cc=' + cc)
#---Run API Call and create reader object
r = requests.get(url, auth=(username, password))
text = r.iter_lines()
reader = csv.reader(text,delimiter=',')
#---Write csv output to csv file with territory and date columns
with open(cc + '_'+ d +'.csv','wt', newline='') as file:
a = csv.writer(file)
a.writerow(['position','id','title','kind','peers','territory','date']) #---Write header line
next(reader) #---Skip original headers
for i in reader:
a.writerow(i +[countrydict[cc]] + [datevalue])
最佳答案
在无法测试您的确切场景的情况下,我相信这应该通过更改 text = r.iter_lines()
来解决到:
text = (line.decode('utf-8') for line in r.iter_lines())
这应该将 r.iter_lines() 读取的每一行从字节字符串解码为 csv.reader 可用的字符串
>>> iter_lines = [b'1,2,3,4',b'2,3,4,5',b'3,4,5,6']
>>> text = (line.decode('utf-8') for line in iter_lines)
>>> reader = csv.reader(text, delimiter=',')
>>> next(reader)
['1', '2', '3', '4']
>>> for i in reader:
... print(i)
...
['2', '3', '4', '5']
['3', '4', '5', '6']
关于python-3.x - 在 Python 3 中未显式打开文件时处理从字节到字符串的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265888/
我是一名优秀的程序员,十分优秀!