2013-07-16 25 views
1

我想从文本文件中绘制数据。无效文字为int()与基地10 ..再现白色空间?

我的数据是形式:

2 - 5 6 6 
4 - 5 6 7 
6 - 5 6 3 
8 - 5 6 3 
1 0 - 5 6 4 
1 2 - 5 6 4 
1 4 - 5 6 3 

这是我的最终报告最多有问题的错误:

>>> from matplotlib import pyplot 
>>> 
>>> time = [] 
>>> value = [] 
>>> 
>>> source = open("textfile6.txt", "r") 
>>> 
>>> for line in source: 
...  line.replace(' ', '') 
...  t, v = line.split('-') 
...  time.append(int(t)) 
...  value.append(int(v)) 
... 
'2-566\n' 
Traceback (most recent call last): 
    File "<stdin>", line 5, in <module> 
ValueError: invalid literal for int() with base 10: '5 6 6\n' 

所以,理由是,我使用str.replace(” ','')为了去掉空格(str.strip()由于某种原因没有达到这个目的!)。然后我str.split(' - ')打破我的专栏。

不过,我不断收到:

ValueError: invalid literal for int() with base 10: '5 6 6\n' 

..as如果空格已奇迹般地出现回第二的字符串中。

回答

4

您是忽略.replace()调用的输出:

line.replace(' ', '') 

Python中的字符串是不可改变的,所以.replace()返回一个新字符串值。重新绑定line的结果:

line = line.replace(' ', '') 
+0

为什么选择课程! – itsmrjack

+0

很多很多谢谢你纠正我的noobness :) – itsmrjack

0

或者,你还可以编写代码:

import re 

with open(inputfile) as fin: 
    lines = (map(int, re.sub(r'[^\d-]', '', line).split('-')) for line in fin) 
    time, value = zip(*lines) 

print time, value 
# (2, 4, 6, 8, 10, 12, 14) (566, 567, 563, 563, 564, 564, 563) 

这具有在什么被拆分,并在一个建筑名单有点更加明确的优势去,而不是在每次迭代中追加。

+0

非常整洁!谢谢。 – itsmrjack

相关问题