用Python读取指定文件夹下的所有Landsat影像,并根据影像获取时间对文件名进行排序

在用Landsat影像数据进行时间序列分析时,往往需要下载很多时相的数据,这些数据大多来自多个传感器,把所有影像数据汇总到一起时的管理是个比较麻烦的问题。

本文介绍用Python(3.5)读取指定文件夹下的遥感影像文件,并根据影像的拍摄时间进行排序,并将排序结果输出到指定文件夹,以便于后期的时间序列数据分析,文件夹内容如下图:

用Python读取指定文件夹下的所有Landsat影像,并根据影像获取时间对文件名进行排序_第1张图片
用Python读取指定文件夹下的所有Landsat影像,并根据影像获取时间对文件名进行排序_第2张图片

输出结果如下图:
其中,第一列是提取出时间,并根据时间进行排序,第二列是文件原名:
用Python读取指定文件夹下的所有Landsat影像,并根据影像获取时间对文件名进行排序_第3张图片


代码块

import os
import operator

listFileObjects=[]
cnt=0
dirStr=r'K:\Aershan TimeSeries 122027'

class fileObj:
    fileDate = 0
    fileName = ''
    def __init__(self,fdate,fname):
        self.fileDate = fdate
        self.fileName= fname

for i in os.walk(dirStr):
    for j in i[2]:
        fileFormatStr = j[-2:]
        if fileFormatStr == 'gz':
            listFileObjects.append(fileObj(int(j[9:16]), j))

cmpfun = operator.attrgetter('fileDate')
listFileObjects.sort(key = cmpfun)

if os.path.exists(dirStr+'/FileList.txt'):
    os.remove(dirStr+'/FileList.txt')

with open(dirStr+'/FileList.txt', 'w') as f:
    for resultObj in listFileObjects:
        f.write(str(resultObj.fileDate)+'\t'+resultObj.fileName+'\n')

知识点

os.walk
os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
可以得到一个三元tupple(dirpath, dirnames, filenames),
第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
dirpath 是一个string,代表目录的路径,
dirnames 是一个list,包含了dirpath下所有子目录的名字。
filenames 是一个list,包含了非目录文件的名字。
这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name).

os.sep(此处为了简便没有用,但如果想跨平台可以用)
首先,Python 是跨平台的。
在 Windows 上,文件的路径分割符号是 ‘\’ ,在 Linux 上 是 ‘/’。
为了让代码在不同的平台上都能运行,那么写路径的时候是写 ‘/’ 还是写 ‘\’ 呢?
使用 os.sep 的话,就不用去考虑这个了,os.sep 根据所处的平台,自动地采用相应的分割符号。
举例:
Linux下一个路径, /usr/share/python,那么上面的 os.sep 就是 ‘/’
Windows下一个路径, C:\Users\Public\Desktop, 那么上面的 os.sep 就是 ‘\’。

截取字符串
str = ’0123456789′
str[0:3] #截取第一位到第三位的字符
str[:] #截取字符串的全部字符
str[6:] #截取第七个字符到结尾
str[:-3] #截取从头开始到倒数第三个字符之前
str[2] #截取第三个字符
str[-1] #截取倒数第一个字符
str[::-1] #创造一个与原字符串顺序相反的字符串
str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
str[-3:] #截取倒数第三位到结尾

List中,根据对象的属性进行排序
首先需要定义类,然后进行实例化,排序代码如下:

cmpfun = operator.attrgetter('fileDate')
listFileObjects.sort(key = cmpfun)

给列表动态赋值

a = []
for i in range(10):
    a.append(i)

带异常处理的读与写(Python 3.x 才有)

读:

with open('/path/to/file', 'r') as f:
  print f.read()

写:

with open('/Users/michael/test.txt', 'w') as f:
  f.write('Hello, world!')

判断文件是否存在,若存在则删除

if os.path.exists(dirStr+'/FileList.txt'):
    os.remove(dirStr+'/FileList.txt')

你可能感兴趣的:(Python工具)