繁体   English   中英

在Python中,如何从文件创建2D列表并为每个子列表中的每个项目分配类型?

[英]In Python, how do you create a 2D list from a file and assign a type to each item in each sublist?

抱歉,这是一个尴尬的标题。 这是我想做的:

  1. 读取每行包含的txt文件:国家/地区名称,区域,人口
  2. 每行变成一个主列表中的子列表
  3. 每个子列表都需要保留变量的类型,因此:每个子列表的string,float,int

一个长输出的示例是:

[['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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM