Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在文件中逐行读取浮动列表中的每一行?_Python_List_File_Python 3.x_File Io - Fatal编程技术网

Python 如何在文件中逐行读取浮动列表中的每一行?

Python 如何在文件中逐行读取浮动列表中的每一行?,python,list,file,python-3.x,file-io,Python,List,File,Python 3.x,File Io,我有一个文件,其中每条线都有一对坐标,如下所示: [-74.0104294, 40.6996416] 我用来读取它们的代码是: with open('Manhattan_Coords.txt', 'r') as f: mVerts = f.read().splitlines() 这会将所有78行读入列表,但它会将它们作为字符串读入,因此当我将它们打印出来时,它会显示为: ['[(-74.0104294, 40.6996416]', ... , '[-74.0104294, 40.69

我有一个文件,其中每条线都有一对坐标,如下所示:

[-74.0104294, 40.6996416]
我用来读取它们的代码是:

with open('Manhattan_Coords.txt', 'r') as f:
    mVerts = f.read().splitlines()
这会将所有78行读入列表,但它会将它们作为字符串读入,因此当我将它们打印出来时,它会显示为:

['[(-74.0104294, 40.6996416]', ... , '[-74.0104294, 40.6996416]']
(想象一下……像第一个和最后一个一样多了76个坐标)


如何读取这些坐标对中的每一个作为列表,以便留下78个子列表,每个子列表中有2个浮点数?

对于每一行,您需要:

  • 阅读它
    ... 使用
    for
    循环在文件上迭代
  • 删除包含换行符的空白
    ... 使用
    str.strip()
  • 丢失第一个和最后一个字符(括号)
    ... 使用:
    [1:-1]
  • 在子字符串上拆分,”
    ... 使用
    str.split()
  • 将结果字符串转换为浮点数
    ... 使用
    float()
  • 将每对浮动添加到列表中
    ... 使用
    list.append()
  • 看起来是这样的:

    m_verts = []
    with open('Manhattan_Coords.txt') as f:
        for line in f:
            pair = [float(s) for s in line.strip()[1:-1].split(", ")]
            m_verts.append(pair)
    
    >>> m_verts
    [[-74.0104294, 40.6996416], ... ]
    
    之后,
    m_verts
    如下所示:

    m_verts = []
    with open('Manhattan_Coords.txt') as f:
        for line in f:
            pair = [float(s) for s in line.strip()[1:-1].split(", ")]
            m_verts.append(pair)
    
    >>> m_verts
    [[-74.0104294, 40.6996416], ... ]
    
    一般来说,您最好对文件的行进行迭代,而不是使用
    splitlines()
    之类的方法一次将它们全部读取到列表中。。。它更具可读性,并且使用大文件时效率更高


    另外,请注意,我使用了更具pythonic风格的under_score样式来命名
    m_verts
    ,而不是您的camelCase样式,并且在打开文件进行读取时,不需要指定
    'r'

    甚至比@zeropyraeus solution使用ast.literal\u eval更好,后者可以评估python的任何文字(这里是浮点文字的列表文字复合)

    但对于列表的构建来说,更好的是列表理解

    import ast
    with open('Manhattan_Coords.txt') as f:
        m_verts = [ast.literal_eval(line) for line in f]
    

    你的拼写是不是错了[(-74.0104294,40.6996416]?也就是说,额外的圆括号?@ZeroPiraeus在我的回答中我用了
    ast.literal\u eval
    ,你可能不知道