如何查找文件并从文件名中提取时间并将其存储在数组中?

时间:2018-02-12 18:40:41

标签: numpy datetime time

我有一个包含几个不同文件的文件夹(txt,dat,jpg),我需要读取所有带有“triang.dat”结尾的文件。这些文件包含文件名的时间,如:

“NIK_054504_triang.dat”

我设法找到文件并将时间转换为秒:

mypath = '/home/rmesqui/Desktop/Upleg/New/'

k=0


for file in os.listdir(mypath):
     if file.endswith("triang.dat"):
         k = k+1

filenames = np.zeros(k)

print filenames
k = 0
for file in os.listdir(mypath):
    if file.endswith("triang.dat"):
        #filenames[k] = file    
        filenames[k] = 
float(file[4:6])*3600.+float(file[6:8])*60.+float(file[8:10])
        k = k+1

timearr = np.sort(filenames)-np.min(filenames)

但是我必须对文件名进行排序,因为读取文件名的过程会返回无序文件。但是,我需要按顺序读取这些文件,因为数据获取的时间对于程序的其余部分很重要。在,我需要有一个数组,如:

lat1 = np.zeros(shape=(100+3,numberOfFiles))

其中“+3”是时间,对于我们的示例,小时= 05,分钟= 45,秒= 04.“100”将是文件中特定列的内容。

谢谢你们!

2 个答案:

答案 0 :(得分:1)

我找到了一种简单的方法

for file in os.listdir(mypath):
     if file.endswith("triang.dat"):
        k = k+1

filenames = np.zeros(k)

k = 0
for file in os.listdir(mypath):
    if file.endswith("triang.dat"):
        #filenames[k] = file
        filenames[k] = float(file[4:6])*3600.+float(file[6:8])*60.+float(file[8:10])
        k = k+1

答案 1 :(得分:0)

还不完全确定问题究竟在哪里。那么这个怎么样:

result = []
for filename in os.listdir(mypath):
    if filename.endswith("triang.dat"):
        hours, minutes, seconds = int(filename[4:6]), int(filename[6:8]), int(filename[8:10])
        with open(filename, 'r') as f:
            # do whatever needed to read the content from the file
            your_100_values_read_from_the_file = range(100)
        result.append([hours, minutes, seconds] + your_100_values_read_from_the_file)

# result is now a list of lists. sort by timestamp
result.sort(key=lambda x: (x[0], x[1], x[2]))

# create your array and transpose since you want one file per column, not per row
lat1 = np.array(result).T

print (lat1.shape)   # should be (103, numberOfFiles)