繁体   English   中英

Python:按逗号分隔行,然后按空格

[英]Python: split line by comma, then by space

我正在使用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索引错误den = [Fraction(elem) for elem in X[1].split()] IndexError: list index out of range

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

问题在于您的文件中包含不带" , "的行,因此拆分不会返回2个元素。

我会改用split(',') ,然后使用strip删除开头和结尾的空格。 请注意, str(...)是多余的, split已返回字符串。

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

您也可能在文件末尾有一个空行,该行仍只会为split产生一个结果,因此您应该有一种处理这种情况的方法。

使用有效的输入,您的代码即可正常工作。

您可能会得到无效的行,其中有太多的空间,甚至是空行。 因此,循环内的第一件事就是打印line 然后您知道发生了什么,可以在错误消息的正上方看到有问题的行。

也许您没有正确使用stdin。 将输入行写到文件中,确保只有有效的行(尤其是没有空行)。 然后将其输入脚本中:

python myscript.py < test.txt

这个怎么样:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM