在下文中,您可以看到ephemeris.txt文件中的数据。现在我想要检索多个列(例如,以00:00,27.69和44.1开头的列)并将数组命名为x,y,z。我该怎么办?
我试过这个
x, y, z = numpy.loadtxt("ephemeris.txt", unpack=True)
这就是这个错误
"ValueError: could not convert string to float: Date__(UT)__HR:MN"
你能帮助我将HR:MN转换成分钟吗?
Date__(UT)__HR:MN R.A.__(a-apparent)__DEC\
**********************************************\
2013-Jan-01 00:00 * 14 31 27.69 -12 29 44.1\
2013-Jan-01 00:01 * 14 31 27.71 -12 29 44.1\
2013-Jan-01 00:02 * 14 31 27.72 -12 29 44.2\
2013-Jan-01 00:03 * 14 31 27.73 -12 29 44.2\
2013-Jan-01 00:04 * 14 31 27.75 -12 29 44.3\
2013-Jan-01 00:05 * 14 31 27.76 -12 29 44.3\
2013-Jan-01 00:06 * 14 31 27.77 -12 29 44.4\
2013-Jan-01 00:07 * 14 31 27.78 -12 29 44.4\
2013-Jan-01 00:08 * 14 31 27.80 -12 29 44.4\
2013-Jan-01 00:09 * 14 31 27.81 -12 29 44.5\
提前致谢
答案 0 :(得分:1)
您可以使用loadtxt
函数的更多参数。
您最常得到的错误是由于前两个标题行,因此请使用skiprows=2
参数跳过它们;
此外,每行包含不同格式的数据,以空格分隔。使用delimiter=' '
以防万一,您可以选择dtype=string
和dtype=object
。
a = numpy.loadtxt("ephemeris.txt", delimiter=' ', dtype=string, skiprows=2)
这应该为您提供一个阵列,您可以在其中执行多种“转换”:每列拆分一个数组,创建行列表等。
x,y,z,etc = numpy.hsplit(a, a.shape[1])
x = x.astype(datetime)
# or
x = a[:,0].astype(datetime)
y = a[:,1].astype(some_type)
或沿着这些方向......
希望这会有所帮助,如果需要,请在评论中详细说明。
答案 1 :(得分:0)
import re
f = open("ephemeris.txt")
for line in f.readlines():
r = re.search("(\d{4})\-(\w{3})-(\d{2}) (\d{2}):(\d{2}) \* (.*?)\\\n", line)
if r:
print "Year: "+r.group(1)
print "Month: "+r.group(2)
print "Day: "+r.group(3)
print "Hour: "+r.group(4)
print "Minute: "+r.group(5)
print "Data: "+r.group(6)
这将读取文件的每一行,检查它是否与模式匹配,如果是,则打印它可以检索的所有数据。
答案 2 :(得分:0)
您还可以分割每一行,设置一个字符分隔符。然后,您可以使用索引访问每个(字符串)令牌:
def prova():
f = open('/home/frenk/Desktop/ephemeris.txt')
l = []
for line in f:
l = line.split(" ")
print "date: " + l[1]
其次,如果你想将像“31”这样的字符串转换为整数31,你可以简单地写:
x = int('31')
请注意,您可以使用切片表示法选择一个字符串切片:
string = "This is a slice of string"
print string[10:15]