在python中从文件创建列表
我有一个.txt文件,如下所示:在python中从文件创建列表,python,string,file,list,Python,String,File,List,我有一个.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] 但是打印a[1]的结果是
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]
但是打印a[1]的结果是每个字符串的第二个字母。您需要的是
令牌[1]
,而不是a[1]
这是a
的值,它是标记的第一个元素
:
Nick
但是代币的第二个要素是年龄:
"34"
正如@user提到的,您可能希望它是整数,而不是字符串。您可以将其转换为整数:
a = int(tokens[1])
@第四,他们提出了一个很好的解决方案。我想我会建议把它存到字典里:
with open('example.txt') as f:
ages = {}
for line in f:
d = line.split()
ages[d[0]] = int(d[1])
下面是年龄
{'John':26, 'Mary':48, 'Nick':34}
要检索约翰的年龄,请执行以下操作:
print(ages['John'])
希望这有帮助 您需要的不是a[1]
,而是令牌[1]
这是a
的值,它是标记的第一个元素
:
Nick
但是代币的第二个要素是年龄:
"34"
正如@user提到的,您可能希望它是整数,而不是字符串。您可以将其转换为整数:
a = int(tokens[1])
@第四,他们提出了一个很好的解决方案。我想我会建议把它存到字典里:
with open('example.txt') as f:
ages = {}
for line in f:
d = line.split()
ages[d[0]] = int(d[1])
下面是年龄
{'John':26, 'Mary':48, 'Nick':34}
要检索约翰的年龄,请执行以下操作:
print(ages['John'])
希望这有帮助
读取文件时,请始终将与
一起使用,这样您就不必担心关闭文件
然后,您可以读取行并拆分它们,最后像这样解压它们
with open('Input.txt', 'r') as inFile:
names, ages = zip(*(line.rstrip().split() for line in inFile))
print names, ages
names[0], ages[0]
输出
('John', 'Mary', 'Nick') ('26', '48', '34')
您可以像这样访问个人姓名和年龄
with open('Input.txt', 'r') as inFile:
names, ages = zip(*(line.rstrip().split() for line in inFile))
print names, ages
names[0], ages[0]
读取文件时,请始终将与
一起使用,这样您就不必担心关闭文件
然后,您可以读取行并拆分它们,最后像这样解压它们
with open('Input.txt', 'r') as inFile:
names, ages = zip(*(line.rstrip().split() for line in inFile))
print names, ages
names[0], ages[0]
输出
('John', 'Mary', 'Nick') ('26', '48', '34')
您可以像这样访问个人姓名和年龄
with open('Input.txt', 'r') as inFile:
names, ages = zip(*(line.rstrip().split() for line in inFile))
print names, ages
names[0], ages[0]
我们不妨在处理下一个bug时抢占它:tokens[1]
是一个字符串,因此除非先将其转换为int
,否则尝试对其进行数学运算将无法正常工作。我们还不知道OP会尝试对年龄字段进行数学运算。:-)是,但标记[1]打印整个列。如何选择特定值34?tokens[1][2]返回第三个字符…@qwrrty:也许他会在name字段上计算基数为36的数字?:)@Galil:tokens[1]
不是整列,而是当前行的年龄。大概你看到整个专栏的原因是你只是想打印所有的名字和年龄,而不是把它们存储在任何一个age
和name
列表中。要做到这一点,只需age.append(a)
而不是print(a)
。(或者按四步走的方式来做。)我们不妨在处理下一个bug时抢占它:tokens[1]
是一个字符串,因此,除非先将其转换为int
,否则尝试对其进行数学运算将无法正常工作。我们还不知道OP会尝试对年龄字段进行数学运算。:-)是,但标记[1]打印整个列。如何选择特定值34?tokens[1][2]返回第三个字符…@qwrrty:也许他会在name字段上计算基数为36的数字?:)@Galil:tokens[1]
不是整列,而是当前行的年龄。大概你看到整个专栏的原因是你只是想打印所有的名字和年龄,而不是把它们存储在任何一个age
和name
列表中。要做到这一点,只需age.append(a)
而不是print(a)
。(或者按照你的方式做)使用genexpr比使用listcomp更好。毫无理由地建立一个额外的列表是没有意义的。但除此之外,我写的是完全相同的东西(我对genexpr与map
的选择犹豫不决,而你在这方面击败了我)。使用genexpr比使用listcomp更好。毫无理由地建立一个额外的列表是没有意义的。但除此之外,我写的是完全相同的东西(我对genexpr与map
的选择犹豫不决,而你在这方面击败了我)。