2016-02-26 59 views
0

我试图从强力球中奖号码文件阅读: http://www.powerball.com/powerball/winnums-text.txtPython的错误从文件缓冲区例如读取

我试图用线把它行,我有这样的代码:

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

你能解释一下你正准备尝试修复什么,以及你想要的输出到底是什么? – idjaw

+0

@idjaw我对帖子进行了更改 –

回答

0

高度推荐使用这种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 
0

line是一个字节序列,而不是字符串。使用str函数将其转换为字符串。

import urllib.request 
with urllib.request.urlopen("http://www.powerball.com/powerball/winnums-text.txt") as file: 
    next(file) 
    for bline in file: 
     line = str(bline, "utf-8") 
     print(line) 
2

正如已经提到的人,文件正在以二进制模式读取。您需要将字符串转换为文本编码格式。 你可以解决这个问题:

line = line.decode("utf-8","ignore") 

这应该给你你所期望的行为。

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响应以询问编解码器,除非您知道如何在别处获取它。

另一种方法是打开文件,使其知道自己的文本编解码器;那么你从它检索的项目将已经是文本。

+0

谢谢,我完成了我的程序 –