我试图从强力球获奖号码文件中读取: http://www.powerball.com/powerball/winnums-text.txt
我试图逐行获取它并且我有这个代码:
import urllib.request
with urllib.request.urlopen("http://www.powerball.com/powerball/winnums-text.txt") as file:
next(file)
for line in file:
line.lstrip("b'")
line.rstrip(" \r\n'")
print(line)
文件中的每一行都打印出来:
b'12/06/1997 15 26 28 08 43 36 \r\n'
b'12/03/1997 18 09 14 47 42 32 \r\n'
b'11/29/1997 11 27 13 02 31 23 \r\n'
b'11/26/1997 15 46 34 23 40 35 \r\n'
b'11/22/1997 22 31 03 07 14 02 \r\n'
我收到错误:
File "powerball.py", line 5, in <module>
line.lstrip("b'")
TypeError: 'str' does not support the buffer interface
我正试图摆脱多余的角色并制作如下这样的一行:
12/06/1997 15 26 28 08 43 36
我该如何解决这个问题?
答案 0 :(得分:3)
正如有人提到的那样,文件正在以二进制模式读取。您需要将字符串转换为文本编码格式。 您可以通过以下方式解决此问题:
line = line.decode("utf-8","ignore")
这应该会给你你期望的行为。
答案 1 :(得分:0)
我高度建议使用pandas用于这种IO,它将处理http请求,解析,所有内容都在一行代码中;作为奖励,您也可以将它用于数据分析:
import pandas as pd
df = pd.read_csv('http://www.powerball.com/powerball/winnums-text.txt')
print(df)
Draw Date WB1 WB2 WB3 WB4 WB5 PB PP
0 02/24/2016 67 21 65 31 64 05 3
1 02/20/2016 54 12 11 16 15 25 5
2 02/17/2016 29 27 07 40 17 25 2
3 02/13/2016 07 15 36 18 19 20 2
4 02/10/2016 02 62 40 50 03 05 2
5 02/06/2016 13 04 36 31 52 08 3
6 02/03/2016 26 60 67 31 28 23 3
7 01/30/2016 16 05 12 31 43 18 4
8 01/27/2016 40 52 03 67 12 21 2
9 01/23/2016 32 22 40 69 34 19 4
10 01/20/2016 44 05 39 69 47 24 5
11 01/16/2016 61 52 51 64 03 06 2
答案 2 :(得分:0)
v0
是一个字节序列,而不是字符串。使用line
函数将其转换为字符串。
str
答案 3 :(得分:0)
for line in file: line.lstrip("b'") line.rstrip(" \r\n'") print(line)
你错误地表达了价值,而不是价值本身。
来自该文件的值不是文本(str
);它们是字节序列(bytes
),Python的程序员表示通过将字符串括在b'…'
中来与您通信。那些封闭的字符不是价值的一部分;你没有成功地删除它们。
相反,您需要从字节创建文本字符串。你通过告诉字节序列解码自己来做到这一点:
for line_bytes in file:
line = line_bytes.decode("utf-8")
print(line)
这需要知道该字节序列的文本编解码器(上面的代码假定为“utf-8”)。您可以询问HTTP响应以询问编解码器,除非您知道如何在其他地方获取它。
另一种方法是打开文件,使其知道自己的文本编解码器;那么你从中检索的项目就已经是文本了。