Python:先用逗号分割,再用space分割
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
我不明白。我从 line
得到一个字符串。我将该字符串在 " , "
处拆分为两个字符串,应该得到一个包含两个字符串的列表 X
。这些我在空格处分成两个单独的列表,同时将每个元素转换为 Fraction
。我错过了什么?
我还尝试添加 X[-1] = X[-1].strip()
来摆脱我从结束行得到的 \n
。
问题是您的文件中有一行没有 " , "
,因此拆分不会 return 2 个元素。
我会改用 split(',')
,然后使用 strip
删除前导和尾随空格。请注意 str(...)
是多余的,split
已经有 return 个字符串。
X = [elem.strip() for elem in line.split(",")]
您可能还会在文件末尾有一个空行,它仍然只会为 split
产生一个结果,因此您应该有办法处理这种情况。
只要输入有效,您的代码就可以正常工作。
您可能得到了无效的行,其中有太多 space 甚至是空行。所以循环内的第一件事,打印 line
。然后你就知道发生了什么了,你可以在错误消息的正上方看到有问题的行是什么。
或者您没有正确使用标准输入。将输入行写入文件,确保只有有效行(尤其是没有空行)。然后将其输入到您的脚本中:
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]
我正在使用 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
。
问题是您的文件中有一行没有 " , "
,因此拆分不会 return 2 个元素。
我会改用 split(',')
,然后使用 strip
删除前导和尾随空格。请注意 str(...)
是多余的,split
已经有 return 个字符串。
X = [elem.strip() for elem in line.split(",")]
您可能还会在文件末尾有一个空行,它仍然只会为 split
产生一个结果,因此您应该有办法处理这种情况。
只要输入有效,您的代码就可以正常工作。
您可能得到了无效的行,其中有太多 space 甚至是空行。所以循环内的第一件事,打印 line
。然后你就知道发生了什么了,你可以在错误消息的正上方看到有问题的行是什么。
或者您没有正确使用标准输入。将输入行写入文件,确保只有有效行(尤其是没有空行)。然后将其输入到您的脚本中:
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]