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

Python:先按逗号分隔行,然后按空格分隔行,python,string,split,Python,String,Split,我使用的是Python3,我需要解析这样一行代码 -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(" , "

我使用的是Python3,我需要解析这样一行代码

-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=[X[1]中元素的分数(elem)]。split()
索引器:列表索引超出范围

我不明白。我从
中得到一个字符串。我在“
”和“
处将该字符串拆分为两个字符串,应该会得到一个包含两个字符串的列表
X
。在将每个元素转换为
分数时,我将这些元素在空白处拆分为两个单独的列表。我错过了什么?

我还尝试添加
X[-1]=X[-1].strip()
,以摆脱从结束行中得到的
\n

问题是,文件中有一行没有
,“
,因此拆分不会返回两个元素

我会使用
split(',')
代替,然后使用
strip
删除前导空格和尾随空格。请注意,
str(…)
是冗余的,
split
已经返回字符串

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

您可能在文件末尾还有一个空行,这仍然只会为
拆分产生一个结果,因此您应该有办法处理这种情况。

如果输入有效,您的代码实际上可以工作

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

或者你没有正确使用标准输入法。在文件中写入输入行,确保只有有效行(尤其是没有空行)。然后将其输入到脚本中:

python myscript.py < test.txt
python myscript.py
这个怎么样:

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]

我想知道同样的事情@PadraicCunningham看起来可能需要使用regex,如果两种情况都需要考虑,请在进行后续列表理解之前打印出X,并告诉我们确切值是多少。另外,您不需要对行中的元素执行
[str(elem)].split(',')]
只要执行
line.split(','))
[str(elem)对行中的元素执行
.split(“,”)
相当于
line.split(“,”
)。对当我用一个文件做这件事时,它就工作了。问题是当我运行时没有文件,只是从命令行。然后我得到一个空字符串作为最后一个。