代码之家  ›  专栏  ›  技术社区  ›  Jack Hunt

读取文本文件并拆分数字

  •  0
  • Jack Hunt  · 技术社区  · 6 年前

    我目前有一个文本文件,其中包含6个数字,我需要能够单独调用。

    文本文件如下所示

    11 12 13

    21 22 23

    到目前为止,我已经使用以下方法尝试获得正确的输出,但没有成功。

    with open(os.path.join(path,"config.txt"),"r") as config:
        mylist = config.read().splitlines() 
        print mylist
    

    这给了我['11 12 13','21 22 23'。

    with open(os.path.join(path,"config.txt"),"r") as config:
        contents = config.read()
        params = re.findall("\d+", contents)
        print params
    

    这给了我['11',12',13',21',22',23']

    with open(os.path.join(path,"config.txt"),"r") as config:
        for line in config:
            numbers_float = map(float, line.split())
            print numbers_float[0]
    

    这给了我11.0 21

    最后一个方法是最接近的,但在第一列中给出了两个数字,而不是一个。

    此外,我是否能够用逗号分隔文本文件中的数字,以获得相同或更好的结果?

    谢谢你的帮助!

    1 回复  |  直到 6 年前
        1
  •  1
  •   abarnert    6 年前

    最后一个是close,您正在为每行中的每个数字创建一个浮点列表;唯一的问题是你只使用了第一个。您需要在列表上循环:

    with open(os.path.join(path,"config.txt"),"r") as config:
        for line in config:
            numbers_float = map(float, line.split())
            for number in numbers_float:
                print number
    

    你也可以把事情弄平

    with open(os.path.join(path,"config.txt"),"r") as config:
        splitlines = (line.split() for line in file)
        flattened = (numeral for line in splitlines for numeral in line)
        numbers = map(float, flattened)
        for number in numbers:
            print number
    

    现在只是 a chain of iterator transformations 如果需要,您可以使该链更加简洁:

    with open(os.path.join(path,"config.txt"),"r") as config:
        numbers = (float(numeral) for line in file for numeral in line.split())
        for number in numbers:
            print number
    

    但我认为这实际上并不清楚,尤其是对于新手来说。