2024-05-18 14:21:20 发布
网友
我需要从格式如下的文件中读取数据:
Jamestown 20 Rocky Mountain 34 Illinois St 28 Ball St 51 Tulsa 7 Bowling Green 34
“两个队的名字都要读到”洛基和“两个队的名字”。在
我该怎么做呢?我试着编写这段代码,看看我是否能读懂团队名称,但不管是什么原因,它都不起作用。在
虽然您的代码过于复杂,但它可以只做一些修改就可以工作,而且有一些实际的程序必须这样编写,因为unlike this case没有更简单的解决方案。在
所以,让我们回顾一下。在
您的第一个问题是,在尝试修改任何起始值之前,您永远不会将team1赋值给它。这不可能有效;只要您尝试访问不存在的值,就会得到一个UnboundLocalError。在
team1
UnboundLocalError
但这也很容易修复:如果您希望team1作为一个空字符串开始,您可以在上面添加额外的字符,只需将以下内容添加到函数的开头:
team1 = ''
你的第二个问题是,在你做了所有的工作来计算team1之后,你只是return什么都没有,所以结果总是None。这也很容易修复:将return语句更改为:
return
None
如果你能解决这两个问题,一切都会成功!你可以看到它正在工作in this online interpreter session。在
看起来你要写的规则是在两个或两个以上的空格上分开。有更简单的方法。例如:
bits = [bit for bit in line.split(' ') if bit] bits = re.split(r'\s\s+', line)
但是,首先我不确定这是否是该文件的正确规则。当你把东西放在固定位置时,你可能想根据这些固定位置来解析它们:
……等等
为什么?因为考虑一下当你得到这样一条线时会发生什么:
Team With a Really Long College Name28 Ball St 51
输出可能会截断名称以确保至少有一个空格。它甚至可以截断以确保至少有两个空格。但除非你知道他们会这么做,否则你的逻辑就会崩溃。而根据实际的列位置来判断是正确的。在
还有一件事:你确定这些列只是用空格隔开的,而不是制表符吗?因为如果字符串真的是这样的:
Tulsa\t 7\tBowling Green\t34
…那么您应该使用line.split('\t')-或者更好的是csv.reader(file, delimiter='\t', skipinitialspace=True)。在
line.split('\t')
csv.reader(file, delimiter='\t', skipinitialspace=True)
import re ll=[] for line in file.readlines(): ll.append(re.findall(r"(.*?)\s{2,}(\d+)",line) print ll
https://regex101.com/r/wV5tP1/12
虽然您的代码过于复杂,但它可以只做一些修改就可以工作,而且有一些实际的程序必须这样编写,因为unlike this case没有更简单的解决方案。在
所以,让我们回顾一下。在
您的第一个问题是,在尝试修改任何起始值之前,您永远不会将
team1
赋值给它。这不可能有效;只要您尝试访问不存在的值,就会得到一个UnboundLocalError
。在但这也很容易修复:如果您希望
team1
作为一个空字符串开始,您可以在上面添加额外的字符,只需将以下内容添加到函数的开头:你的第二个问题是,在你做了所有的工作来计算
^{pr2}$team1
之后,你只是return
什么都没有,所以结果总是None
。这也很容易修复:将return
语句更改为:如果你能解决这两个问题,一切都会成功!你可以看到它正在工作in this online interpreter session。在
看起来你要写的规则是在两个或两个以上的空格上分开。有更简单的方法。例如:
但是,首先我不确定这是否是该文件的正确规则。当你把东西放在固定位置时,你可能想根据这些固定位置来解析它们:
^{pr2}$……等等
为什么?因为考虑一下当你得到这样一条线时会发生什么:
输出可能会截断名称以确保至少有一个空格。它甚至可以截断以确保至少有两个空格。但除非你知道他们会这么做,否则你的逻辑就会崩溃。而根据实际的列位置来判断是正确的。在
还有一件事:你确定这些列只是用空格隔开的,而不是制表符吗?因为如果字符串真的是这样的:
…那么您应该使用
line.split('\t')
-或者更好的是csv.reader(file, delimiter='\t', skipinitialspace=True)
。在https://regex101.com/r/wV5tP1/12
相关问题 更多 >
编程相关推荐