gpt4 book ai didi

python-3.x - 在 Python 3 中未显式打开文件时处理从字节到字符串的转换

转载 作者:行者123 更新时间:2023-12-04 18:32:30 25 4
gpt4 key购买 nike

我正在使用 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' 中处理。模式。

这篇文章非常相似,但由于我没有直接打开 csv 文件,我似乎无法强制以这种方式对响应文本进行编码:
csv.Error: iterator should return strings, not bytes
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com