我正在尝试导入文本文件 (.xyz),该文件如下所示:
1 9 1 6 "Thu Feb 13 13:12:30 2014 "
0 0 0 0 0 0
38 38 915 915
"CJE "
"2 "
"110321-025-01D-1ST
0 0 1 .1 73.7972 17 50
1 0 7 1 60 0 0 0 0
0 " "
1 0
#
38 38 No Data
39 38 No Data
40 38 No Data
41 38 3
42 38 No Data
43 38 4
44 38 4
45 38 5
#
文本文件有一个标题(前 11 行),其中包含一些数值,如下所示,数据也分为三列,其中一列有数值,但也有书面字符:“否数据”。我还想将“无数据”更改为数值 0。
我可以跳过标题,但主要问题是我用它来告诉代码有三列,并且其中“没有数据”意味着 0。 这是我目前用过的,
import numpy as np
data = np.genfromtxt('180228_Test V2-4_0grad.xyz',
skip_header=11,
skip_footer=1,
names=True,
dtype=None,
delimiter=' ')
print(data)
最佳答案
您可以添加 invalid_raise = False
来跳过有问题的行或 usecols=np.arange(0, 3)
,但是我会采用以下方法:
列表.txt:
1 9 1 6 "Thu Feb 13 13:12:30 2014 "
0 0 0 0 0 0
38 38 915 915
"CJE "
"2 "
"110321-025-01D-1ST
0 0 1 .1 73.7972 17 50
1 0 7 1 60 0 0 0 0
0 " "
1 0
#
38 38 No Data
39 38 No Data
40 38 No Data
41 38 3
42 38 No Data
43 38 4
44 38 4
45 38 5
然后:
logFile = "list.txt"
# opening the file
with open(logFile) as f:
#reading the lines after slicing it i.e. 11
content = f.readlines()[11:]
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]
# for each line in content
for line in content:
# if the line has No Data in it
if line.find("No Data"):
# Replacing the No Data with 0 using replace() method
line = line.replace("No Data", "0")
print(line)
输出:
38 38 0
39 38 0
40 38 0
41 38 3
42 38 0
43 38 4
44 38 4
45 38 5
编辑:
将它们添加到 3 列矩阵中:
_list = []
# for each line in content
for line in content:
# if the line has No Data in it
if line.find("No Data"):
# Replacing the No Data with 0 using replace() method
line = line.replace("No Data", "0")
# print(line)
# list comprehension for splitting on the basis of space and appending to the list
_list.append([e for e in line.split(' ') if e])
print(_list)
输出:
[['38', '38', '0'], ['39', '38', '0'], ['40', '38', '0'], ['41', '38', '3'],
['42', '38', '0'], ['43', '38', '4'], ['44', '38', '4'], ['45', '38', '5']]
编辑2:
要删除文件中的最后一行,您可以使用切片 content[:-1]:
:
logFile = "list.txt"
# opening the file
with open(logFile) as f:
#reading the lines after slicing it i.e. 11
content = f.readlines()[11:]
_list = []
# for each line in content
for line in content[:-1]:
# if the line has No Data in it
if line.find("No Data"):
# Replacing the No Data with 0 using replace() method
line = line.replace("No Data", "0")
# list comprehension for splitting on the basis of space and appending to the list
_list.append([e for e in line.strip().split(' ') if e])
print(_list)
输出:
[['38', '38', '0'], ['39', '38', '0'], ['40', '38', '0'], ['41', '38', '3'],
['42', '38', '0'], ['43', '38', '4'], ['44', '38', '4'], ['45', '38', '5']]
关于python - 导入函数参数 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54553763/