【问题标题】:Reading all lines in a file with list comprehension使用列表理解读取文件中的所有行
【发布时间】:2012-10-09 12:08:10
【问题描述】:

我有一个简单的问题,如果我在 stackoverflow 中发帖,我很抱歉。我是python的新手,我不记得我如何在列表压缩中读取x,y,z

我的文件是一个 x,y,z 文件,其中每一行都是一个点:

x1,y1,z1
x2,y2,z2
x3,y3,z3
........

inFile = "Myfile.las"

with lasfile.File(inFile, None, 'r') as f:
     # missing part
     points =[]

我希望保存一个只有 x 和 y 的对象

在此先感谢您对这个简单的问题表示歉意

【问题讨论】:

    标签: python file-io list-comprehension


    【解决方案1】:

    您想要一个 x 和 y 坐标列表,这很简单:

    with lasfile.File(inFile, None, 'r') as f:
         # missing part
         points = [line.split(',')[:2] for line in lasfile]
    

    如果这些坐标是整数,您可以通过快速调用map() 将它们转换为python int(来自str):

    points = [map(int, line.split(',')[:2]) for line in lasfile]
    

    在 python 3 中,map 是一个生成器,最好使用嵌套列表推导:

    points = [[int(i) for i in line.split(',')[:2]] for line in lasfile]
    

    这将产生一个列表列表:

    [[x1, y1], [x2, y2], ...]
    

    【讨论】:

    • 或者 python3.x 中的可迭代列表:-/ -- 有时我希望他们保留一个返回列表的类似地图的函数。 lmap 什么的...
    • @mgilson:确实;在这种情况下,嵌套列表推导式可能更具可读性。
    • 感谢我的想法是读取 x 和 y 并找到 Xmax、Xmin、Ymax 和 Ymin。我写了一段代码,但真的不优雅。
    • 使用你的代码我有这个问题 Traceback (最近一次调用最后): File "", line 1, in AttributeError: exit跨度>
    • @Gianni:看了一眼project's codebase,我发现不支持将File 对象用作上下文管理器完全。您总是应该在__exit__ 上收到属性错误。
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 2021-01-12
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多