Python:用逗号分隔,然后用空格

时间:2015-05-07 22:49:27

标签: python string split

我正在使用Python 3,我需要解析像这样的行

-1 0 1 0 , -1 0 0 1

我想使用Fraction将其拆分为两个列表,以便我也可以解析

这样的条目
1/2 17/12 , 1 0 1 1

我的程序使用这样的结构

from sys import stdin
...
functions'n'stuff
...
for line in stdin:

我正在尝试

for line in stdin:
X = [str(elem) for elem in line.split(" , ")]
num = [Fraction(elem) for elem in X[0].split()]
den = [Fraction(elem) for elem in X[1].split()]

但我得到的是列表索引超出范围错误:den = [Fraction(elem) for elem in X[1].split()] IndexError: list index out of range

我不明白。我从line得到一个字符串。我将该字符串拆分为" , "的两个字符串,并且应该得到一个包含两个字符串的列表X。这些我在空白处分成两个单独的列表,同时将每个元素转换为Fraction。我错过了什么?
我还尝试添加X[-1] = X[-1].strip()以摆脱我从结束该行所获得的\n

3 个答案:

答案 0 :(得分:1)

问题是您的文件中有一行没有" , ",因此拆分不会返回2个元素。

我改为使用split(','),然后使用strip删除前导空格和尾随空格。请注意,str(...)是多余的,split已经返回字符串。

X = [elem.strip() for elem in line.split(",")]

您可能在文件末尾还有一个空白行,这仍然只会为split生成一个结果,所以您应该有办法处理这种情况。

答案 1 :(得分:1)

使用有效输入,您的代码实际上可以正常工作。

你可能会得到一条无效的行,空间太大甚至是空行。首先在循环内部打印line。然后你知道发生了什么,你可以在错误信息的正上方看到问题线是什么。

或者你可能没有正确使用stdin。将输入行写入文件,确保只有有效行(特别是没有空行)。然后将其提供给您的脚本:

python myscript.py < test.txt

答案 2 :(得分:0)

这个怎么样:

pairs = [line.split(",") for line in stdin]
num = [fraction(elem[0]) for elem in pairs if len(elem) == 2]
den = [fraction(elem[1]) for elem in pairs if len(elem) == 2]