【问题标题】:How to loop through multiple csv files and output their contents into one array?如何遍历多个 csv 文件并将其内容输出到一个数组中?
【发布时间】:2017-03-17 22:39:33
【问题描述】:

我在 python 中工作并尝试从多个 LAZ 文件中获取 x、y、z 坐标,并将它们放入一个数组中,以用于另一次分析。我正在尝试自动执行此任务,因为我有大约 2000 个文件可以变成一个甚至 10 个数组。该示例涉及两个文件,但我无法使循环正常工作。我认为我没有正确命名我的变量。下面是我一直在尝试编写的示例代码(请注意,我对编程非常陌生,如果这是一个糟糕的代码,请道歉)。

创建 las 文件列表,然后将它们转换为数组——尝试更好的自动化

import numpy as np
from laspy.file import File
import glob as glob

# create list of vegetation files to be opened
VegList = sorted(glob.glob('/Users/sophiathompson/Desktop/copys/Clips/*.las'))

for f in VegList:
    print(f)

    Veg = File(filename = f, mode = "r")  # Open the file
    points = Veg.get_points() # Grab all of the points from the file.
    print points #this is a check that the number of rows changes at the end
    print ("array shape:")
    print points.shape
    VegListCoords = np.vstack((Veg.x, Veg.y, Veg.z)).transpose()

print VegListCoords

此块读取两个文件,但用文件列表中第二个文件的结果填充VegListCoords。我需要它来保存两者的记录。如果这是一种可怕的方法,我对一种新方法非常开放。

【问题讨论】:

    标签: python arrays loops csv numpy


    【解决方案1】:

    您通过分配上次打开文件中的值来不断覆盖VegListCoords

    相反,在开头初始化:

    VegListCoords = []
    

    改为:

    VegListCoords.append(np.vstack((Veg.x, Veg.y, Veg.z)).transpose())
    

    如果您希望它们最后放在一个 numpy 数组中,请使用 np.concatenate

    【讨论】:

    • 非常感谢您的回复!您的意思是在开始时初始化(但仍在 for 循环内(如此缩进))还是在开始 for 循环之前定义 VegListCoords = [ ]?
    • 在你开始 for 循环之前,否则你会遇到同样的问题,它会在每次迭代中不断重新初始化
    • 是的!!!那行得通!我正在尝试学习python,但从未上过课。如果我可能会问,为什么 VegListCoord=[] 创建了一个 for 循环可以填充的房子,但在我的原始脚本中没有发生这种情况?是不是因为原件的编写方式,它只指示用最后读取的 x y z 点从最后读取的文件中填充它?但是将其概述为 VegListCoords = [ ] 为两者提供了一个容纳的地方?如果这太过分了,我理解并非常感谢您的有用建议!!!
    • 这是因为您使用VegListCoords.append 而不是VegListCoords=。您正在为同一个变量分配新值,因此每次最后分配的值都被删除。我们通过使用列表来改变这一点,并向该列表附加(不分配)新值。
    猜你喜欢
    • 2023-03-12
    • 2019-04-09
    • 1970-01-01
    • 2021-08-26
    • 2019-03-20
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多