[英]In Python, how do you create a 2D list from a file and assign a type to each item in each sublist?
抱歉,这是一个尴尬的标题。 这是我想做的:
一个长输出的示例是:
[['Afghanistan', '647500.0', '25500100'], ['Albania', '28748.0', '2821977'], ['Algeria', '2381740.0', '38700000'], ['American Samoa', '199.0', '55519'], ['Andorra', '468.0', '76246']
等...和python需要知道每个变量的类型,例如,如果我想创建一个对列表中所有浮点数进行排序的新函数。
这就是我现在所拥有的,但是它只将每一行作为子列表返回,如果我想将此二维列表用于新功能,我相信不知道类型。
def Countries(filename):
f = open(filename)
lines = f.readlines()
f.close()
myList = []
for line in lines:
myList.append(line.strip().split(','))
return myList
也许这就是您要寻找的:
def Countries(filename):
f = open(filename)
myList = []
for line in f.readlines():
line_data = line.split(",")
myList.append(line_data)
return myList
但是,如果它是.txt文件,我认为它只会返回字符串。 因此,您必须转换类型。
您遇到的主要问题是f.readlines()
将所有内容读取为字符串。 然后,您可以通过类型检查器来映射子列表中的每个项目,如下所示:
def typeCheck(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except:
return s
会尝试将您的参数显式转换为'int',然后是'float',然后将其保留不变。 之所以这样,是因为所有可以转换为“ int”的事物也可以转换为“ float”,但反之亦然,因此您要先检查int
(即'123.1'
会引发错误)对于int('123.1')
而不是float('123.1')
)
然后可以像这样添加映射列表:
for line in lines:
myList.append(list(map(typeCheck,line.strip().split(',')))
可以转换为浮点数和整数的值将被转换。
例:
>>> def typeCheck(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except:
return s
>>> l = [['Afghanistan', '647500.0', '25500100'], ['Albania', '28748.0', '2821977'], ['Algeria', '2381740.0', '38700000'], ['American Samoa', '199.0', '55519'], ['Andorra', '468.0', '76246']]
>>> for i in l: print(list(map(typeCheck,i)))
['Afghanistan', 647500.0, 25500100]
['Albania', 28748.0, 2821977]
['Algeria', 2381740.0, 38700000]
['American Samoa', 199.0, 55519]
['Andorra', 468.0, 76246]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.