我知道cvs模块提供了一种非常好的方法来解析python中的文本文件。我有一个包含以下列的文件:
x y z b
这里,x y z b是浮点数。但是,我面临着以任何可能的方式改变订单权的可能性。例如,文件可能是
b y x z
现在,我想将数据读入一个numpy数组,该数组应该以b x y z格式存储数据。所以,阅读功能应该是这样的:
def read_file(file_path, inputformat='xyzb', delimiter=' '):
现在,我可以查看每一行,并且有一个很大的if / else类型的逻辑,对于四个位置中的每一个,我将查询格式字符,然后将其插入到数组中的相应位置。但是,我想知道是否有更优雅的方式来处理这种排列?
答案 0 :(得分:2)
我建议使用numpy.loadtxt
加载数据(请参阅documentation),然后使用数组切片来更正列顺序。
编辑:实际上,您可以使用usecols
参数直接指定所需的列顺序,例如:
import numpy as np
def read_file(file_path, input_format="xyzb", desired_format="bxyz", delimiter=" "):
usecols = [input_format.index(col) for col in desired_format]
with open(file_path, "r") as inf:
return np.loadtxt(inf, usecols=usecols, delimiter=delimiter)