我有一个包含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)
答案 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)
通过明智地执行split
和strip
(如果需要)
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