如何在Python中打开文本文件并创建数组

2024-09-30 18:18:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为Orbit1的文本文件,我需要帮助打开它,然后创建三个单独的数组。我是Python新手,在这方面一直有困难。下面是我的文本文件的前几行。包括标题在内共有1112行

Year    Month   Day Hour    Minute  Second  Millisecond Longitude   Latitude    Altitude
2019    3   17  5   55  55  0   108.8730074 50.22483151 412.6226898
2019    3   17  5   56  0   0   108.9895097 50.53642185 412.7368197
2019    3   17  5   56  5   0   109.1078294 50.8478274  412.850563
2019    3   17  5   56  10  0   109.2280101 51.15904424 412.9640113
2019    3   17  5   56  15  0   109.3500969 51.47006828 413.0772319
2019    3   17  5   56  20  0   109.4741362 51.78089533 413.1901358
2019    3   17  5   56  25  0   109.6001758 52.09152105 413.3025291
2019    3   17  5   56  30  0   109.728265  52.40194099 413.414457
2019    3   17  5   56  35  0   109.8584548 52.71215052 413.5259984
2019    3   17  5   56  40  0   109.9907976 53.02214489 413.6371791

我希望打开这个文本文件来创建三个数组,分别称为lat[N]、long[N]和time[N],其中N是文件中的行数。我最终希望能够确定任意点的纬度、经度和时间。例如,如果工作正常,lat[0]应该返回50.22483151。此外,目前,我需要将时间转换为十进制小时,然后创建数组

基本上,我需要帮助打开这个文本文件,然后创建三个数组

我尝试过用这种方法打开文件,但在尝试写入数组时遇到了问题,我想我可能无法正确打开文件

import numpy as np
 
file_name = 'C:\\Users\\Saman\\OneDrive\\Documents\\Orbit 1.txt'

data = []
with open(file_name) as file:
    next(file)
    for line in file:
        row = line.split()
        row = [float(x) for x in row]
        data.append(row)

Tags: 文件nameinfordataasline时间
2条回答

解决问题最简单的方法是使用熊猫:

import pandas as pd
df = pd.read_table('Orbit 1.txt', sep=r'\s+')
df['Longitude']
#0    108.873007
#1    108.989510
#2    109.107829
#3    109.228010
#4    109.350097
#5    109.474136
#6    109.600176
#7    109.728265
#8    109.858455
#9    109.990798

一旦您获得了一个数据帧,您可能也希望将其用于其余的数据处理

file_name = 'info.txt'

Lat=[]
Long=[]
Time=[]
left_justified=lambda x: x+" "*(19-len(x))
right_justified=lambda x: " "*(19-len(x))+x

with open(file_name) as file:
    next(file)
    for line in file:
        data=line.split()
        Lat.append(data[8])
        Long.append(data[7])
        hrs=int(data[3])
        minutes=int(data[4])
        secs=int(data[5])
        total_secs=secs+minutes*60+hrs*3600
        Time.append(total_secs/3600)
        
print(left_justified("Time"),left_justified("Lat"),left_justified("Long"))
for i in range(len(Lat)):
    print(left_justified(str(Time[i])),left_justified(Lat[i]),left_justified(Long[i]))

试试这个

相关问题 更多 >