Python-spilt()覆盖多个空间
我按照这个答案的()方向找到了一个T,但它一直失败,所以我想知道是我缺少了一些简单的东西,还是我需要一个新的方法来解决这个问题 我有以下.eml文件: 我的目标是最终解析出所有鱼类种群及其相应的重量,但对于测试,我只使用以下代码:Python-spilt()覆盖多个空间,python,split,Python,Split,我按照这个答案的()方向找到了一个T,但它一直失败,所以我想知道是我缺少了一些简单的东西,还是我需要一个新的方法来解决这个问题 我有以下.eml文件: 我的目标是最终解析出所有鱼类种群及其相应的重量,但对于测试,我只使用以下代码: with open(file_path) as f: for line in f: if ("Haddock" in line): #fish, remainder = re.split(" +", line)
with open(file_path) as f:
for line in f:
if ("Haddock" in line):
#fish, remainder = re.split(" +", line)
fish, remainder = line.split()
print(line.lower().strip())
print("fish:", fish)
print("remainder:", remainder)
它在第fish行失败,余数=line.split()
错误
ValueError:要解包的值太多(预期为2个)
这告诉我Python失败是因为它试图在太多的空间上拆分,对吗?还是我误解了?我想从这个过程中得到两个值:鱼的名称(包含许多空格前的所有文本的字符串)和数量(输入行右侧的整数)
任何帮助都将不胜感激 您可以使用下面的正则表达式进行拆分
fish, remainder = re.split(r'(?<=\w)\s+(?=\d)',line.strip())
it will split and give `['GB Haddock West', '22572']`
fish,rements=re.split(r')(?您可以使用下面的正则表达式进行拆分
fish, remainder = re.split(r'(?<=\w)\s+(?=\d)',line.strip())
it will split and give `['GB Haddock West', '22572']`
fish,余数=re.split(r'(?)?
我希望鱼
是GB Haddock West
,剩余的是22572
你可以这样做:
s = line.split()
fish, remainder = " ".join(s[:-1]), s[-1]
您可以使用rindex()
找到最后一个空格并在其中拆分,而不是使用split()
at = line.rindex(" ")
fish, remainder = line[:at], line[at+1:]
两者都将输出:
print(fish) # GB Haddock West
print(remainder) # 22572
我希望鱼
是GB Haddock West
,剩余的是22572
你可以这样做:
s = line.split()
fish, remainder = " ".join(s[:-1]), s[-1]
您可以使用rindex()
找到最后一个空格并在其中拆分,而不是使用split()
at = line.rindex(" ")
fish, remainder = line[:at], line[at+1:]
两者都将输出:
print(fish) # GB Haddock West
print(remainder) # 22572
是的,你可以在多个空间上分割。但是,除非你能指定空格数,否则你会在中间得到额外的空字段,就像你现在得到的。例如:
in_stuff = [
"GB Haddock West 22572",
"GB Cod West 7207",
"GB Haddock East 3776"
]
for line in in_stuff:
print line.split(" ")
输出:
['GB Haddock West', '', '', ' 22572']
['GB Cod West', '', '', '', '', '7207']
['GB Haddock East', '', '', ' 3776']
GB Haddock West 22572
GB Cod West 7207
GB Haddock East 3776
但是,一个简单的更改将得到您想要的:从以下字段中选择第一个和最后一个字段:
for line in in_stuff:
fields = line.split(" ")
print fields[0], int(fields[-1])
输出:
['GB Haddock West', '', '', ' 22572']
['GB Cod West', '', '', '', '', '7207']
['GB Haddock East', '', '', ' 3776']
GB Haddock West 22572
GB Cod West 7207
GB Haddock East 3776
这会解决你的问题吗?
是的…你可以在多个空间上分割。但是,除非你能指定空格数,否则你会在中间得到额外的空字段,就像你现在得到的。例如:
in_stuff = [
"GB Haddock West 22572",
"GB Cod West 7207",
"GB Haddock East 3776"
]
for line in in_stuff:
print line.split(" ")
输出:
['GB Haddock West', '', '', ' 22572']
['GB Cod West', '', '', '', '', '7207']
['GB Haddock East', '', '', ' 3776']
GB Haddock West 22572
GB Cod West 7207
GB Haddock East 3776
但是,一个简单的更改将得到您想要的:从以下字段中选择第一个和最后一个字段:
for line in in_stuff:
fields = line.split(" ")
print fields[0], int(fields[-1])
输出:
['GB Haddock West', '', '', ' 22572']
['GB Cod West', '', '', '', '', '7207']
['GB Haddock East', '', '', ' 3776']
GB Haddock West 22572
GB Cod West 7207
GB Haddock East 3776
这能解决您的问题吗?基于@Vallentin的答案,但使用Python 3的扩展解包功能:
In [8]: line = "GB Haddock West 22572"
In [9]: *fish, remainder = line.split()
In [10]: print(" ".join(fish))
GB Haddock West
In [11]: print(int(remainder))
22572
基于@Vallentin的答案,但使用Python 3的扩展解包功能:
In [8]: line = "GB Haddock West 22572"
In [9]: *fish, remainder = line.split()
In [10]: print(" ".join(fish))
GB Haddock West
In [11]: print(int(remainder))
22572
你是对的。line.split()
会产生['GB'、'Haddock'、'West'、'22572']
,当然不能将其分解为两个名称。哦,好的。那么有没有办法直接回答链接用户的问题呢?我可以split()吗
特别是在一行中的几个空格上?你能举例说明一下鱼和余数是什么吗?对,我不是很清楚。在过去的案例(电子邮件)中,他们通常会列出鱼、重量和价格;所以第一个拆分()
将产生一条鱼和一条余数
,然后我将split()
余数
产生一个重量和价格。在这种情况下,我希望鱼
是GB Haddock West
而余数
是22572
。你是对的。line.split()
结果是['GB'、'Haddock'、'West'、'22572']
当然不能将其分解为两个名称。哦,好的。那么有没有办法直接回答链接用户的问题?我可以拆分()
特别是在一行中的几个空格上?你能举例说明一下鱼和余数是什么吗?对,我不是很清楚。在过去的案例(电子邮件)中,他们通常会列出鱼、重量和价格;所以第一个拆分()
将产生一条鱼和一条余数
,然后我将split()
余数
产生一个重量和价格。在这种情况下,我希望鱼
是GB Haddock West
而余数
是22572
。