3
import pylab as pl

data = """AP 10
AA 20
AB 30
BB 40
BC 40
CC 30
CD 20
DD 10"""

grades = []
number = []

for line in data.split("/n"):
     x, y = line.split()
     grades.append(x)
     number.append(int(y))       
fig = pl.figure()
ax=fig.add_subplot(1,1,1)
ax.bar(grades,number)
p.show()

这是我的代码,我希望根据数据制作条形图。最初,当我运行代码时,在第 17 行出现缩进错误,在为整个 for 块添加空格后,在第 16 行开始出现“太多值无法解压错误”。我是新手python,我现在不知道如何进行。

4

4 回答 4

4

问题是您for-loop在错误的标记 ( /n) 而不是\n.

但是,当您只想拆分换行符时,实际上有一个splitlines()字符串上的 -method 可以做到这一点:您应该实际使用此方法,因为它也会处理 *nix 和 Windows 之间的不同换行符分隔符(*nix 系统通常表示换行符via \r\n,而 Windows 使用\n,旧的 Mac OS 使用\r:查看Python 文档以获取更多信息)

您的错误发生在下一行:由于字符串未拆分为行,您的整个字符串现在将在空白处拆分,这将产生比您尝试分配给元组的 2 更多的值。

于 2013-06-10T14:05:49.453 回答
4

您有一条没有两个项目的行:

 x, y = line.split()

没有拆分为两个元素,这会引发错误。很可能是因为您没有data正确拆分变量并将整个文本作为一个长文本。/n不会出现在您的data数据中。

改用.splitlines()

for line in data.splitlines():
     x, y = line.split()
于 2013-06-10T14:07:18.320 回答
3
for line in data.split("/n")

应该

for line in data.split("\n")

甚至更好:

for line in data.splitlines()
于 2013-06-10T14:03:04.397 回答
1

为了一个有趣的替代方案,而不是使用splitlines其他人提出的方法,您还可以在此处使用StringIO对象:

>>> data = """AP 10
... AA 20
... AB 30
... BB 40
... BC 40
... CC 30
... CD 20
... DD 10"""
>>> import cStringIO as StringIO
>>> filelike = StringIO.StringIO(data)
>>> for line in filelike:
...     print line.split()
... 
['AP', '10']
['AA', '20']
['AB', '30']
['BB', '40']
['BC', '40']
['CC', '30']
['CD', '20']
['DD', '10']
于 2013-06-10T14:08:54.670 回答