【问题标题】:Create a list from file in python在python中从文件创建一个列表
【发布时间】:2013-12-19 01:26:36
【问题描述】:

我有一个这样的 .txt 文件:

John 26
Mary 48
Nick 34

我想导入它们并将它们放在一个列表中,以便我可以找到特定的元素。例如,age[1] 的值为 48,name[1] 的值为 Mary 等。

我试过了

import sys,random
f = open('example.txt', 'r')
for line in f:
        tokens=line.split()
        a=tokens[0]
        print a[1]

但是 print a[1] 的结果是每个字符串的第二个字母。

【问题讨论】:

    标签: python string file list


    【解决方案1】:

    你想要tokens[1],而不是a[1]

    这是a的值,是tokens的第一个元素:

    Nick
    

    但是tokens的第二个元素是年龄:

    "34"
    

    正如@user 提到的,您可能希望将它作为整数,而不是字符串。您可以将其转换为整数:

    a = int(tokens[1])
    

    @thefourtheye 提出了一个不错的解决方案。我想我会建议将其存储在字典中:

    with open('example.txt') as f:
        ages = {}
        for line in f:
            d = line.split()
            ages[d[0]] = int(d[1])
    

    这里是ages

    {'John':26, 'Mary':48, 'Nick':34} 
    

    检索John的年龄:

    print(ages['John'])
    

    希望这会有所帮助!

    【讨论】:

    • 最好在我们处理下一个错误时抢占它:tokens[1] 是一个字符串,因此除非将其转换为 int,否则尝试对其进行数学运算将无法正常工作首先。
    • 我们还不知道 OP 会尝试在年龄领域做数学。 :-)
    • 是的,但是 tokens[1] 打印整列。如何选择特定值 34? tokens[1][2] 返回第三个字符...
    • @qwrrty:也许他会在名称字段上以 36 为基数进行数学运算? :)
    • @Galil: tokens[1] 不是整列,是当前行的年龄。您看到一整列的原因大概是您只是想print 所有的姓名和年龄,而不是将它们存储在任何agename 列表中。为此,只需 age.append(a) 而不是 print(a)。 (或者按照你们的方式去做。)
    【解决方案2】:
    1. 读取文件时,请始终使用with,这样您就不必担心关闭文件。
    2. 然后,您可以读取行并将它们拆分,最后像这样解压缩它们

      with open('Input.txt', 'r') as inFile:
          names, ages = zip(*(line.rstrip().split() for line in inFile))
          print names, ages
      

      输出

      ('John', 'Mary', 'Nick') ('26', '48', '34')
      
    3. 您可以像这样访问个人姓名和年龄

      names[0], ages[0]
      

    【讨论】:

    • 使用genexpr 比使用listcomp 更好。无缘无故地建立一个额外的清单是没有意义的。但除此之外,我写的是完全相同的东西(我对genexpr 与map 的选择犹豫不决,你打败了我)。
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 2021-12-14
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多