Python:从文本文件到数组的每一行读取第n个值

时间:2017-05-12 10:50:07

标签: python arrays list text-files

我有一个包含XYZ数据的非常大的文本文件,每个值由一个空格分隔:

100000 200000 2.5698
200000 200000 1.9863
200000 400000 2.2587
...

我正在寻找只创建每行中最后一个值的数组(即Z值)。到目前为止我所拥有的是:

with open(xyzFile) as f:
    for eachLine in f:
        tmpLine = f.readline()
        print("### tmpLine: {0}".format(tmpLine))

按预期打印出文件的第一行:

### tmpLine: 253575 705575 83.710655

如何获取第三个值并迭代到文本文件中的下一行?我想我在这里需要一个for循环。我知道如何将值附加到数组,这将介于这两个进程之间:

zArray.append(zValue)

4 个答案:

答案 0 :(得分:2)

您可以尝试使用numpy的loadtxt,找到文档here。有一个方便的usecols参数,你可以设置为2,只读第3列。使用您提供的少量数据,以下代码生成第3列的1D数组

import numpy as np
z = np.loadtxt("filename.txt", usecols=2)

print (z)
# output is [ 2.5698  1.9863  2.2587]

答案 1 :(得分:1)

通过明智地执行splitstrip(如果需要)

来尝试此操作
with open(xyzFile) as f:
    for eachLine in f:
        print("### tmpLine: {0}".format(eachLine.strip().split()[-1].strip()))

答案 2 :(得分:1)

您将读取该行并在空格tmpLine.split(' ')的基础上拆分该行,然后您将获得该行的数组。

在该数组中获取第三个元素。tmpLine.split(' ')[2]

zArray = []

with open(xyzFile) as f:
    for eachLine in f:
        zArray.append(eachLine.split(' ')[2])

Jon建议的List Comprehension的另一种方式是:

with open(xyzFile) as f:

        zArray = [eachline.split(' ')[2] for eachline in f]

答案 3 :(得分:0)

您可以使用csv模块

with open(xyzFile) as f:
    for row in csv.reader(f, delimiter=" "):
        print(row[-1])

产生类似这样的东西:

2.5698
1.9863
2.2587