li2200是测量植物冠层的一个仪器,其得到的结果是一个个文件夹,数据多时比艰难获取。利用python将文件夹的lai读取出来,由于是否存在GPS所以写个判断。读出的数据有LAI,叶倾角,经纬度。打开时选择LI2200文件的路径,输出路径在程序里修改。

"""
author:shenshuaijie
time:22:05  07/03/2020
des:提取li-2200的LAI
"""

import tkinter as tk
from tkinter import filedialog
import os
import pandas as pd


def get_all_files(dir):
    """
    获取文件夹列表函数
    :param dir: 文件夹所在位置
    :return: 文件夹内文件名称列表
    """
    files_ = []
    lit = os.listdir(dir)
    for i in range(0, len(lit)):
        path = os.path.join(dir, lit[i])
        if os.path.isdir(path):
            files_.extend(get_all_files(path))
        if os.path.isfile(path):
            files_.append(path)
    return files_


def main():
    """
    主函数
    """

    root = tk.Tk() # 可视化选择文件夹
    root.withdraw()
    Folder_path = filedialog.askdirectory()
    dir_lai =  Folder_path # 文件夹所在位置
    file_dir = get_all_files(dir_lai)
    li_2200 = {}
    lai = []
    for i in file_dir:
        f = open(i, 'r')
        a = f.readlines()
        if not a[9][:3]=='LAI':
            li_2200['name'] = i[i.rindex('\\')+1: -4]
            li_2200['LAI'] = float(a[14][4:9])
            li_2200['ACF'] = float(a[16][4:10])
            li_2200['DIFN'] = float(a[17][5:11])
            li_2200['MTA'] = float(a[18][4:9])
            li_2200['LAT'] = float(a[9][7:17])
            li_2200['LON'] = float(a[10][8:19])
            li_2200['DATE'] = float(a[2][5:14])
            lai.append(li_2200.copy())
            f.close()
        else:
            li_2200['name'] = i[i.rindex('\\')+1: -4]
            li_2200['LAI'] = float(a[9][4:9])
            li_2200['ACF'] = float(a[11][4:10])
            li_2200['DIFN'] = float(a[12][5:11])
            li_2200['MTA'] = float(a[13][4:9])
            li_2200['LAT'] = None
            li_2200['LON'] = None
            li_2200['DATE'] = float(a[2][5:14])
            lai.append(li_2200.copy())
            f.close()
    df = pd.DataFrame(lai)
    DF1=df.reindex(columns=['name','LAI','ACF','DIFN','MTA','LAT','LON','DATE'])
    DF1.to_excel(r'C:\Users\Administrator\Desktop\数据\20200513before.xlsx', index=False)  # 文件输出位置
    print('完成了,到输出的文件夹看看吧!')

if __name__ == '__main__':
    main()




Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐