利用地质年代图谱精准判读文献中的地质时间

2023-10-22 18:40

本文主要是介绍利用地质年代图谱精准判读文献中的地质时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用地质年代图谱精准判读文献中的地质时间

项目场景:

地质时间是地球科学数据的重要基础标签,其测年结果直接影响地学相关的物质分析与地球演化预期。因此,准确获知样品的地质时间对地学分析具有重要意义。随着深时数字地球(DDE)项目的研究深入,越来越多历史文献中的地质样品及其理化属性信息获得关注。例如,文献Friend et al.(1976, p. 43-46)中数据可被用于的古气候模拟。然而,文献中记载MiddleDevonian是基于1980s科学界的认知,与当代ISC2020版本的MiddleDevonian绝对时间存在差异。因此,如何精准判读文献中的地质时间是地学领域的难题之一。

随着DDE大科学计划的实施推进,海量地质年代图谱(1917-2020)被构建发布,这些不同年代的地质年代图谱给精准判读文献中的地质时间提供了相对的时间参考系,使得精准判读文献中的地质时间成为可能。

为了让文献中的海量地质时间被广泛应用,竞赛组设置“利用地质年代图谱精准判读文献中的地质时间”赛题,评比参赛算法的性能。期望参赛者在探索算法的同时,深刻理解文献知识的内涵以及文献中相关样品名称、空间位置、样品类型等属性信息对地质年代版本的影响关系,以加深对地球科学数据和知识的理解。

赛题介绍
针对竞赛组数据集,利用DDE大科学计划中大知识组构建标准地质年代图谱(共计53项)设计相关算法(Python实现),准确地判读所给数据集中每条样品记录的绝对地质时间区间及相应不确定度,例如样品中标注的Devonian为[419.2Ma±3.2Ma, 258.9Ma±2.4Ma]。

  1. 竞赛数据集(记录数2479条,提供包括字段LithologyCode、LithologyIDNumber、OldIDNumber、LAT(latitude)、NS(North or South)、LONG(longitude)、EW(East or west)、Continent、Country、GeogComments、LMU、Period、Stage、AgeComments、Lithology、Formation、LithComments、PrimaryReference、SeeAlso);

问题描述

这个是官方比赛赛题网址,我记得注册数据就可以下载,所以公开数据不违法,传送门http://hellodde2022.org/algorithm?type=1,数据样式

utf:middle_pennsylvanianskos:prefLabel "middle_pennsylvanian"@en ;rdf:type utf:Interval_time ;utf:start 311.7;utf:start_uncertainty 0.0 ;utf:end 306.5 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;utf:partOf utf:pennsylvanian;
.utf:phanerozoicskos:prefLabel "phanerozoic"@en ;rdf:type utf:Interval_time ;utf:start 542.0;utf:start_uncertainty 0.0 ;utf:end 0.0 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;
.utf:cenozoicskos:prefLabel "cenozoic"@en ;rdf:type utf:Interval_time ;utf:start 65.5;utf:start_uncertainty 0.0 ;utf:end 0.0 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;utf:partOf utf:phanerozoic;
.utf:mesozoicskos:prefLabel "mesozoic"@en ;rdf:type utf:Interval_time ;utf:start 251.0;utf:start_uncertainty 0.0 ;utf:end 65.0 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;utf:partOf utf:phanerozoic;
.utf:palaeozoicskos:prefLabel "palaeozoic"@en ;rdf:type utf:Interval_time ;utf:start 542.0;utf:start_uncertainty 0.0 ;utf:end 251.0 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;utf:partOf utf:phanerozoic;
.utf:early_palaeozoicskos:prefLabel "early_palaeozoic"@en ;rdf:type utf:Interval_time ;utf:start 542.0;utf:start_uncertainty 0.0 ;utf:end 416.0 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;utf:partOf utf:palaeozoic;
.utf:late_palaeozoicskos:prefLabel "late_palaeozoic"@en ;rdf:type utf:Interval_time ;utf:start 416.0;utf:start_uncertainty 0.0 ;utf:end 251.0 ;utf:end_uncertainty 0.0 ;utf:unit "Ma"@en ;utf:reference_system utf:BGSGT12 ;utf:partOf utf:palaeozoic;
.

根据LMU,Period,和Stage在上面数据集找到合适的数据后填入黄色的内容中start,start_uncertainty,end,end_uncertainty,reference_system utf。
在这里插入图片描述


数据预处理:

我只用了九个ttl,官方下载是ttl文件很无语,我首先就是转载成txt。

import os
def renaming(file):"""修改后缀"""ext = os.path.splitext(file)  # 将文件名路径与后缀名分开if ext[1] == '.ttl':  # 文件名:ext[0]new_name = ext[0] + '.txt'  # 文件后缀:ext[1]os.rename(file, new_name)  # tree()已切换工作地址,直接替换后缀
def tree(path):"""递归函数"""files = os.listdir(path)  # 获取当前目录的所有文件及文件夹for file in files:file_path = os.path.join(path, file)  # 获取该文件的绝对路径if os.path.isdir(file_path):  # 判断是否为文件夹tree(file_path)  # 开始递归else:os.chdir(path)  # 修改工作地址(相当于文件指针到指定文件目录地址)renaming(file)  # 修改后缀
this_path = os.getcwd()  # 获取当前工作文件的绝对路径(文件夹)
tree(r'D:\pythonProject\DDE\参考地质年表\database')

将九个txt,融合成一张大表txt。

# -*- coding:utf-8 -*-
import os"""
合并多个txt
"""# 获取目标文件夹的路径
path = "D:\pythonProject\DDE\参考地质年表\database"
# 获取当前文件夹中的文件名称列表
filenames = os.listdir(path)
result = "D:\pythonProject\DDE\参考地质年表\database\merge.txt"
# 打开当前目录下的result.txt文件,如果没有则创建
file = open(result, 'w+', encoding="utf-8")
# 向文件中写入字符# 先遍历文件名
for filename in filenames:filepath = path + '/'filepath = filepath + filename# 遍历单个文件,读取行数for line in open(filepath, encoding="utf-8"):file.writelines(line)file.write('\n')
# 关闭文件
file.close()

算法模型:

大家看完直接用就行备注写的很详细了,里面地质具体匹配的规则我也不懂,就只是一个需求:

import os
import xlrd
from xlutils.copy import copy
def extract():dir = r"./test/"osfile = []for root, dirs, files in os.walk(dir):for file in files:if file.split('.')[1] == 'txt':osfile.append(file)for indexFile in range(len(osfile)):with open('./test/' + osfile[indexFile], "r", encoding="utf-8") as f:lines = f.readlines()# print(lines)flatstrat = []flatend = []for index in range(len(lines)):if lines[index].find('skos:prefLabel')!=-1:flatstrat.append(index-1)# 由于每一段结尾并不能确定,所有采用flatstrat.append(index-5)当每一段结尾,最后一个结尾为len(lines)for end in range(1,len(flatstrat)):flatend.append(flatstrat[end]-2)flatend.append(len(lines))#print(len(flatstrat),len(flatend))# 将没段存入词典examples = []for indexSE in range(len(flatstrat)):examples.append(lines[flatstrat[indexSE]:flatend[indexSE]+1])# 清洗count = 0for exs in range(len(examples)):results.append([x.strip() for x in examples[exs] if x.strip() != ''])for res in range(len(results)):results[res].pop()for resinner in range(len(results[res])):results[res][resinner]=results[res][resinner].replace(';','').replace('@en','').replace('early','Lower').replace('late','Upper').replace('middle','Middle').strip()# 锚点检测一下一定有skos:prefLabel 但不一定有utf:partOf因此要达到数量一一致for indexre in range(len(results)):flagpartOf = 1for indexreinner in range(len(results[indexre])):if results[indexre][indexreinner].find('utf:partOf') != -1:flagpartOf = 0if flagpartOf:results[indexre].append('utf:partOf utf:NUlL')# 提取所有skos:prefLabel 和 utf:partOf 的数据for indexre in range(len(results)):for indexreinner in range(len(results[indexre])):if results[indexre][indexreinner].find('prefLabel') != -1:prefLabel.append(results[indexre][indexreinner])if results[indexre][indexreinner].find('utf:partOf') != -1:partOf.append(results[indexre][indexreinner])# for index in range(len(results)):#     print(results[index])print('===========================================================')
def targetxlsx():# 打开文件,获取excel文件的workbook(工作簿)对象workbook = xlrd.open_workbook("test.xlsx")  # 文件路径worksheet = workbook.sheet_by_index(0)name = worksheet.name  # 获取表的姓名ncols = worksheet.ncols  # 获取该表总列数# 找到所有列数据for cols in range(ncols):# print(worksheet.col_values(cols))# print(len(worksheet.col_values(index)))# 用数组进行备份totalTagert.append(worksheet.col_values(cols))# for totalIndex in range(len(totalTagert)):#     print(totalTagert[totalIndex])def targetMatch():# 打印目标三列LMU = totalTagert[10]print(LMU)Period = totalTagert[11]print(Period)Stage = totalTagert[12]print(Stage)print('====+++++++++++++++++++++++++++=====')print(prefLabel)print(partOf)for indexstage in range(1,len(Stage)):# 第一种情况Stage存在的时候且Period和LMU都有if Stage[indexstage] and Period[indexstage] and LMU[indexstage]:flagindex = 1innerindex = []for indexpref in range(len(prefLabel)):if prefLabel[indexpref].lower().find(Stage[indexstage].lower())!= -1 and partOf[indexpref].lower().find(Period[indexstage].lower())!= -1:# 找到了flagindex = 0innerindex.append(indexpref)# print(indexpref)# print(Stage[indexstage])# print(Period[indexstage])# print(prefLabel[indexpref])# print(partOf[indexpref])# print('=====================================')# 没找到if flagindex:innerindex.append(-1)indexresults.append(innerindex)# 第二种情况Period和LMU都有且LMU不为缩写elif Period[indexstage] and not LMU[indexstage].find('-')!= -1:flagindex = 1innerindex = []for indexpref in range(len(prefLabel)):if prefLabel[indexpref].lower().find(Period[indexstage].lower()) != -1 and prefLabel[indexpref].lower().find(LMU[indexstage].lower()) != -1:# 找到了flagindex = 0innerindex.append(indexpref)# elif prefLabel[indexpref].lower().find(Period[indexstage].lower()) != -1:#     # 找到了#     flagindex = 0#     innerindex.append(indexpref)# 没找到if flagindex:innerindex.append(-1)indexresults.append(innerindex)# 第三种情况Period和LMU且LMU为缩写模式elif Period[indexstage] and LMU[indexstage].find('-')!=-1:flagindex = 1innerindex = []# ('early','Lower') ('late','Upper') ('middle','Middle') L - M - Uif LMU[indexstage].find('L') != -1 and LMU[indexstage].find('U') != -1:# print(LMU[indexstage])innerindex.append(-2)for indexpref in range(len(prefLabel)):if prefLabel[indexpref].lower().find(Period[indexstage].lower()) != -1 and (prefLabel[indexpref].lower().find('Lower'.lower()) != -1 or prefLabel[indexpref].lower().find('Upper'.lower()) != -1):# 找到了flagindex = 0innerindex.append(indexpref)elif LMU[indexstage].find('L') != -1 and LMU[indexstage].find('M')!= -1 :#print(LMU[indexstage])innerindex.append(-2)for indexpref in range(len(prefLabel)):if prefLabel[indexpref].lower().find(Period[indexstage].lower()) != -1 and (prefLabel[indexpref].lower().find('Lower'.lower()) != -1 or prefLabel[indexpref].lower().find('Middle'.lower()) != -1):# 找到了flagindex = 0innerindex.append(indexpref)elif LMU[indexstage].find('M')!= -1 and LMU[indexstage].find('U') != -1:print(LMU[indexstage])innerindex.append(-2)for indexpref in range(len(prefLabel)):if prefLabel[indexpref].lower().find(Period[indexstage].lower()) != -1 and (prefLabel[indexpref].lower().find('Middle'.lower()) != -1 or prefLabel[indexpref].lower().find('Upper'.lower()) != -1):# 找到了flagindex = 0innerindex.append(indexpref)# 没找到if flagindex:innerindex.append(-1)indexresults.append(innerindex)else:indexresults.append([-1])def writeToTarger(path, writeresult):#print(indexresults)for index in range(len(indexresults)):print(indexresults[index])# 读取存在数字列表如果是唯一一个数据,且不是空数据for index in range(len(indexresults)):wirtelist = []if len(indexresults[index]) == 1 and indexresults[index][0] != -1:#print(results[indexresults[index][0]])for writeindex in range(len(results[indexresults[index][0]])):if results[indexresults[index][0]][writeindex].find('utf:start ') != -1:wirtelist.append(results[indexresults[index][0]][writeindex][9:].strip())if results[indexresults[index][0]][writeindex].find('utf:start_uncertainty ') != -1:wirtelist.append(results[indexresults[index][0]][writeindex][21:].strip())if results[indexresults[index][0]][writeindex].find('utf:end ') != -1:wirtelist.append(results[indexresults[index][0]][writeindex][7:].strip())if results[indexresults[index][0]][writeindex].find('utf:end_uncertainty ') != -1:wirtelist.append(results[indexresults[index][0]][writeindex][19:].strip())if results[indexresults[index][0]][writeindex].find('utf:reference_system utf:') != -1:wirtelist.append(results[indexresults[index][0]][writeindex][25:].strip())writeresult.append(wirtelist)elif len(indexresults[index]) != 1 and indexresults[index][0] != -2 and indexresults[index][0] != -1:# print(indexresults[index])# 建立temp比大小 默认为第一个starttemp = ''start_uncertaintytemp = ''flotstart_uncertaintytemp = 0.0endtemp = ''end_uncertaintytemp = ''referencetemp = ''for writeindex in range(len(results[indexresults[index][0]])):if results[indexresults[index][0]][writeindex].find('utf:start ') != -1:starttemp = results[indexresults[index][0]][writeindex][9:].strip()if results[indexresults[index][0]][writeindex].find('utf:start_uncertainty ') != -1:start_uncertaintytemp = results[indexresults[index][0]][writeindex][21:].strip()flotstart_uncertaintytemp = float(start_uncertaintytemp)if results[indexresults[index][0]][writeindex].find('utf:end ') != -1:endtemp  = results[indexresults[index][0]][writeindex][7:].strip()if results[indexresults[index][0]][writeindex].find('utf:end_uncertainty ') != -1:end_uncertaintytemp = results[indexresults[index][0]][writeindex][19:].strip()if results[indexresults[index][0]][writeindex].find('utf:reference_system utf:') != -1:referencetemp = results[indexresults[index][0]][writeindex][25:].strip()# 从第二个开始for indexinner in range(1,len(indexresults[index])):# print(results[indexresults[index][indexinner]])start = ''start_uncertainty = ''floatstart_uncertainty = 0.0end = ''end_uncertainty = ''reference = ''for indextemp in range(len(results[indexresults[index][indexinner]])):if results[indexresults[index][indexinner]][indextemp].find('utf:start_uncertainty ') != -1:start_uncertainty = results[indexresults[index][indexinner]][indextemp][21:].strip()floatstart_uncertainty = float(start_uncertainty)if results[indexresults[index][indexinner]][indextemp].find('utf:start ') != -1:start = results[indexresults[index][indexinner]][indextemp][9:].strip()if results[indexresults[index][indexinner]][indextemp].find('utf:end ') != -1:end = results[indexresults[index][indexinner]][indextemp][7:].strip()if results[indexresults[index][indexinner]][indextemp].find('utf:end_uncertainty ') != -1:end_uncertainty = results[indexresults[index][indexinner]][indextemp][19:].strip()if results[indexresults[index][indexinner]][indextemp].find('utf:reference_system utf:') != -1:reference = results[indexresults[index][indexinner]][indextemp][25:].strip()# 比大小if flotstart_uncertaintytemp > floatstart_uncertainty:starttemp = startstart_uncertaintytemp = start_uncertaintyendtemp = endend_uncertaintytemp = end_uncertaintyreferencetemp = referencewirtelist.append(starttemp)wirtelist.append(start_uncertaintytemp)wirtelist.append(endtemp)wirtelist.append(end_uncertaintytemp)wirtelist.append(referencetemp)writeresult.append(wirtelist)######################################################################## 第三种输入中存在多个LMU的elif len(indexresults[index]) != 1 and indexresults[index][0] == -2:indexresults[index].pop(0)print(indexresults[index])L = []M = []U = []# 将LMU各项分类for indexLMU in range(len(indexresults[index])):if results[indexresults[index][indexLMU]][1].lower().find('Lower'.lower())!=-1:L.append(results[indexresults[index][indexLMU]])if results[indexresults[index][indexLMU]][1].lower().find('Upper'.lower())!=-1:U.append(results[indexresults[index][indexLMU]])if results[indexresults[index][indexLMU]][1].lower().find('Middle'.lower())!=-1:M.append(results[indexresults[index][indexLMU]])# 建立分别比较原则 L-U start start_uncertainty为L,end end_uncertainty为U,因此依次分为3类print('&'*100)print(L)print(U)print(M)print('+'*100)# 建立通用保存数据数列starttemp = ''start_uncertaintytemp = ''flotstart_uncertaintytemp = 0.0endtemp = ''end_uncertaintytemp = ''floatend_uncertaintytemp = 0.0referencetemp = ''# 第一类L-Uif L and U:# 比较晒选出符合L的start start_uncertainty# 建立temp比大小 默认为第一个for indexL in range(len(L[0])):if L[0][indexL].find('utf:start ') != -1:starttemp = L[0][indexL][9:].strip()if L[0][indexL].find('utf:start_uncertainty ') != -1:start_uncertaintytemp = L[0][indexL][21:].strip()flotstart_uncertaintytemp = float(start_uncertaintytemp)if L[0][indexL].find('utf:reference_system utf:') != -1:referencetemp = L[0][indexL][25:].strip()for indexU in range(len(U[0])):if U[0][indexU].find('utf:end ') != -1:endtemp = U[0][indexU][7:].strip()if U[0][indexU].find('utf:end_uncertainty ') != -1:end_uncertaintytemp = U[0][indexU][19:].strip()floatend_uncertaintytemp = float(end_uncertaintytemp)#从第二个开始 L 为start U 为endfor indexLt in range(1,len(L)):start = ''start_uncertainty = ''floatstart_uncertainty = 0.0reference = ''for indexLttemp in range(len(L[indexLt])):if L[indexLt][indexLttemp].find('utf:start ') != -1:start = L[indexLt][indexLttemp][9:].strip()if L[indexLt][indexLttemp].find('utf:start_uncertainty ') != -1:start_uncertainty =  L[indexLt][indexLttemp][21:].strip()floatstart_uncertainty = float(start_uncertainty)if L[indexLt][indexLttemp].find('utf:reference_system utf:') != -1:reference = L[indexLt][indexLttemp][25:].strip()# 比大小if flotstart_uncertaintytemp > floatstart_uncertainty:starttemp = startstart_uncertaintytemp = start_uncertaintyreferencetemp = referencefor indexUt in range(1,len(U)):end = ''end_uncertainty = ''floatend_uncertainty = 0.0for indexUttemp in range(len(U[indexUt])):if U[indexUt][indexUttemp].find('utf:end ') != -1:end = U[indexUt][indexUttemp][7:].strip()if U[indexUt][indexUttemp].find('utf:end_uncertainty ') != -1:end_uncertainty =  U[indexUt][indexUttemp][19:].strip()floatend_uncertainty = float(end_uncertainty)# 比大小if floatend_uncertaintytemp > floatend_uncertainty:endtemp = endend_uncertaintytemp = end_uncertainty# 第二类L-Melif L and M:# 比较晒选出符合L的start start_uncertainty# 建立temp比大小 默认为第一个for indexL in range(len(L[0])):if L[0][indexL].find('utf:start ') != -1:starttemp = L[0][indexL][9:].strip()if L[0][indexL].find('utf:start_uncertainty ') != -1:start_uncertaintytemp = L[0][indexL][21:].strip()flotstart_uncertaintytemp = float(start_uncertaintytemp)if L[0][indexL].find('utf:reference_system utf:') != -1:referencetemp = L[0][indexL][25:].strip()for indexM in range(len(M[0])):if M[0][indexM].find('utf:end ') != -1:endtemp = M[0][indexM][7:].strip()if M[0][indexM].find('utf:end_uncertainty ') != -1:end_uncertaintytemp = M[0][indexM][19:].strip()floatend_uncertaintytemp = float(end_uncertaintytemp)# 从第二个开始 L 为start M 为endfor indexLt in range(1, len(L)):start = ''start_uncertainty = ''floatstart_uncertainty = 0.0reference = ''for indexLttemp in range(len(L[indexLt])):if L[indexLt][indexLttemp].find('utf:start ') != -1:start = L[indexLt][indexLttemp][9:].strip()if L[indexLt][indexLttemp].find('utf:start_uncertainty ') != -1:start_uncertainty = L[indexLt][indexLttemp][21:].strip()floatstart_uncertainty = float(start_uncertainty)if L[indexLt][indexLttemp].find('utf:reference_system utf:') != -1:reference = L[indexLt][indexLttemp][25:].strip()# 比大小if flotstart_uncertaintytemp > floatstart_uncertainty:starttemp = startstart_uncertaintytemp = start_uncertaintyreferencetemp = referencefor indexMt in range(1,len(M)):end = ''end_uncertainty = ''floatend_uncertainty = 0.0for indexMttemp in range(len(M[indexMt])):if M[indexMt][indexMttemp].find('utf:end ') != -1:end = M[indexMt][indexMttemp][7:].strip()if M[indexMt][indexMttemp].find('utf:end_uncertainty ') != -1:end_uncertainty =  M[indexMt][indexMttemp][19:].strip()floatend_uncertainty = float(end_uncertainty)# 比大小if floatend_uncertaintytemp > floatend_uncertainty:endtemp = endend_uncertaintytemp = end_uncertainty# 第三类elif M and U:# 比较晒选出符合M的start start_uncertainty# 建立temp比大小 默认为第一个for indexM in range(len(M[0])):if M[0][indexM].find('utf:start ') != -1:starttemp = M[0][indexM][9:].strip()if M[0][indexM].find('utf:start_uncertainty ') != -1:start_uncertaintytemp = M[0][indexM][21:].strip()flotstart_uncertaintytemp = float(start_uncertaintytemp)if M[0][indexM].find('utf:reference_system utf:') != -1:referencetemp = M[0][indexM][25:].strip()for indexU in range(len(U[0])):if U[0][indexU].find('utf:end ') != -1:endtemp = U[0][indexU][7:].strip()if U[0][indexU].find('utf:end_uncertainty ') != -1:end_uncertaintytemp = U[0][indexU][19:].strip()floatend_uncertaintytemp = float(end_uncertaintytemp)# 从第二个开始 L 为start U 为endfor indexMt in range(1,len(M)):start = ''start_uncertainty = ''floatstart_uncertainty = 0.0reference = ''for indexMttemp in range(len(M[indexMt])):if M[indexMt][indexMttemp].find('utf:start ') != -1:start = M[indexMt][indexMttemp][9:].strip()if M[indexMt][indexMttemp].find('utf:start_uncertainty ') != -1:start_uncertainty =  M[indexMt][indexMttemp][21:].strip()floatstart_uncertainty = float(start_uncertainty)if M[indexMt][indexMttemp].find('utf:reference_system utf:') != -1:reference = M[indexMt][indexMttemp][25:].strip()# 比大小if flotstart_uncertaintytemp > floatstart_uncertainty:starttemp = startstart_uncertaintytemp = start_uncertaintyreferencetemp = referencefor indexUt in range(1,len(U)):end = ''end_uncertainty = ''floatend_uncertainty = 0.0for indexUttemp in range(len(U[indexUt])):if U[indexUt][indexUttemp].find('utf:end ') != -1:end = U[indexUt][indexUttemp][7:].strip()if U[indexUt][indexUttemp].find('utf:end_uncertainty ') != -1:end_uncertainty =  U[indexUt][indexUttemp][19:].strip()floatend_uncertainty = float(end_uncertainty)# 比大小if floatend_uncertaintytemp > floatend_uncertainty:endtemp = endend_uncertaintytemp = end_uncertaintyprint(starttemp)print(start_uncertaintytemp)print(endtemp)print(end_uncertaintytemp)print(referencetemp)wirtelist.append(starttemp)wirtelist.append(start_uncertaintytemp)wirtelist.append(endtemp)wirtelist.append(end_uncertaintytemp)wirtelist.append(referencetemp)writeresult.append(wirtelist)else:writeresult.append(['NULL'])print('*'*100)for index in range(len(writeresult)):print(writeresult[index])print(len(writeresult))print('=============================')# 写入表格index = len(writeresult)  # 获取需要写入数据的行数workbook = xlrd.open_workbook(path)  # 打开工作簿sheets = workbook.sheet_names()  # 获取工作簿中的所有表格worksheet = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格rows_old = worksheet.nrows  # 获取表格中已存在的数据的行数new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格for i in range(0, index):for j in range(0, len(writeresult[i])):new_worksheet.write(i + 1, j + 19, writeresult[i][j])  # 追加写入数据,注意是从i+rows_old行开始写入new_workbook.save(path)  # 保存工作簿print("xls格式表格【追加】写入数据成功!")
if __name__ == '__main__':results = []prefLabel = []partOf = []extract()totalTagert = []targetxlsx()LMU = []Period = []Stage = []TargetMatchIndex = []indexresults = []targetMatch()writeresult = []book_name_xls = 'test.xlsx'writeToTarger(book_name_xls, writeresult)

Github:https://github.com/zhichen-roger/Accurately-interpreting-the-geological-time-in-the-literature-by-using-the-geological-time-map.git

这篇关于利用地质年代图谱精准判读文献中的地质时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262962

相关文章

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例