我如何选择一个';在Python中,文件中的数字旁边是什么?
假设我打开了这个文件(wordlist.txt): 如果变量是14623,我如何选择它旁边的单词?请尝试以下操作:我如何选择一个';在Python中,文件中的数字旁边是什么?,python,list,Python,List,假设我打开了这个文件(wordlist.txt): 如果变量是14623,我如何选择它旁边的单词?请尝试以下操作: with open('wordlist.txt') as f: for line in f: row = line.split() if row[0] == '14623': print(row[1]) break 如果您只想访问该项目一次,那么这是非常可读的: with open('test
with open('wordlist.txt') as f:
for line in f:
row = line.split()
if row[0] == '14623':
print(row[1])
break
如果您只想访问该项目一次,那么这是非常可读的:
with open('test.txt') as f:
print next(line.split()[1] for line in f
if line.startswith('14623'))
如果你只做了一次,就按照falsetru展示的方式来做 如果需要查找多个数字,请将条目存储在字典中:
wordmap = {}
with open('wordlist.txt') as f:
for line in f:
key, value = line.split()
wordmap[key] = value
现在,您可以像这样查找任何数字:
>>> wordmap['14623']
borneo
您可能需要添加一些改进:
rstrip
单词末尾的换行符wordmap[int(key)]
这样你就可以查找wordmap[14623]
而不是wordmap['14623']
'glassdfefewasd'
,而不是转储一般异常或任何适当的错误消息使用正则表达式:
import re
line_num = 14615
print re.search(r''+str(line_num)+' (\w+)', file_text).group()
为避免不必要的拆分,请执行
if line.startswith('14623'):
然后在if station内部拆分。@StevenRumbalski:这只会通过两种不同的方式来避免不必要的拆分,我认为这会使事情变得更复杂,并且可能会带来一个小的、很少相关的性能好处。@abarnert:它是如何以两种不同的方式完成工作的?if line.startswith('14623'):print line.split()[1]
在我看来并不复杂。我同意这“可能是一个小的、很少相关的性能优势”。@StevenRumbalski:它必须仔细阅读'14623'
,才能(有效地)查看空格前的部分是否与“startswith”调用中的'14623'
匹配,它必须再次读取相同的前缀才能找到空格并在其上拆分。(这不是“浪费的性能”)“把它扫描两次,你的版本可能会更快,而且可能也没关系;事实上,你在重复自己,做两件不同的事情,必须有相同的效果。)不管怎样,任何一件都足够可读,但我认为falsetru的方法更明显。这不是更干净而且(可以忽略)吗如果row=line.split()
wask,v=line.split()
,效率会更高吗?@RussW:我不知道(或真的在乎)它是否会更高效,但你说得对,它更干净(我认为无效行上的错误消息甚至会稍微好一点)。我会编辑答案。谢谢。@RussW:好的,我想我在乎一点。:)从CPython 3.3.0中的快速测试来看,该更改确实将时间从60.8us减少到了59.8us。所以,你的猜测是对的。但是用传递给dict的genexp替换整个过程(这相当于行[0]
和行[1]
,但在C…)将其减少到54.3us。当然,你已经说得对,它更干净,这更重要,但很高兴知道你对另一部分也是正确的,对吗?:)
with open('wordlist.txt') as f:
wordmap = dict(line.rstrip().split(None, 1) for line in f)
import re
line_num = 14615
print re.search(r''+str(line_num)+' (\w+)', file_text).group()