Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何选择一个';在Python中,文件中的数字旁边是什么?_Python_List - Fatal编程技术网

我如何选择一个';在Python中,文件中的数字旁边是什么?

我如何选择一个';在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

假设我打开了这个文件(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.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
    单词末尾的换行符
  • 代码>拆分(无,1)处理它们中间的空格
  • wordmap[int(key)]
    这样你就可以查找
    wordmap[14623]
    而不是
    wordmap['14623']
  • 用理解力把整件事改写成两行
  • 更好的错误处理,因此如果文件中的一行无效,您可以跳过它,或者打印一条有用的错误消息,如“invalid line#1731:
    'glassdfefewasd'
    ,而不是转储一般异常或任何适当的错误消息
  • 例如,这包括#1、#2和#4:


    使用正则表达式:

    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()
    was
    k,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()