首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将文件名从julian转换为公历日期,然后重新插入为filename

将文件名从julian转换为公历日期,然后重新插入为filename
EN

Stack Overflow用户
提问于 2015-08-14 19:46:12
回答 3查看 626关注 0票数 0

我有一堆这样的文件名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LT50300281984137PAC00_sr_band3.tif

LT50300281985137PAC00_sr_band1.tif

我想将每个文件名的9:16中包含的公历日期更改为公历日期,然后将新日期重新插入到文件名中。我已经使用以下代码将julian转换为gregorian:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import datetime, glob, os
    for raster in glob.glob('r'F:\Sheyenne\Atmospherically Corrected Landsat\hank_masked\julian_dates/*.tif'):
        year=int(oldFilename[9:13])
    #the day
        day=int(oldFilename[13:16])
    #convert to julian date
        date=datetime.datetime(year,1,1)+datetime.timedelta(day)
        print date

这将为我提供每个文件的公历日期,因此对于像这样的LT50300281984137PAC00_sr_band3.tif文件,它将返回1984-05-17 00:00:00,但我不想要00:00:00,我想将公历日期重新插入到文件名中,最好是19840517

编辑:

使用到目前为止所有答案中的建议,我可以使用以下代码执行重命名(此示例中的最后一行代码)之外的所有操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import datetime, glob, os
        for raster in glob.glob(r'F:\Sheyenne\Atmospherically Corrected Landsat\hank_masked\julian_dates/*.tif'):
    oldFilename=raster
    year=int(oldFilename[9:13])
    #the day
    day=int(oldFilename[13:16])
    #convert to julian date
    date=datetime.datetime(year,1,1)+datetime.timedelta(day)
    #generate newfile names
    newFilename=oldFilename[:9] + date.strftime('%Y%m%d') + oldFilename[16:]
    #rename the files
    os.rename(oldFilename, newFilename) 

这将返回error:WindowsError: [Error 2] The system cannot find the file specified,我认为这可能与我的os路径有关。在此之前,所有其他变量都会按预期进行填充。

编辑:此代码适用于我

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arcpy.env.workspace=r'F:\Sheyenne\Atmospherically Corrected Landsat\hank_masked\julian_dates'
hank_bands='F:\Sheyenne\Atmospherically Corrected Landsat\hank_masked\julian_dates'
hank_out='F:\Sheyenne\Atmospherically Corrected Landsat\hank_masked\greg_dates'
list1=arcpy.ListRasters("*.tif")
for raster in list1:
    source_path = os.path.join(hank_bands, raster)
    oldFilename=raster
    year=int(oldFilename[9:13])
    #the day
    day=int(oldFilename[13:16])
    #convert to julian date
    date=datetime.datetime(year,1,1)+datetime.timedelta(day)
    newFilename=oldFilename[:9] + date.strftime('%Y%m%d') + oldFilename[16:]
    destination_path=os.path.join(hank_out, newFilename)
    os.rename(source_path, destination_path) 
EN

回答 3

Stack Overflow用户

发布于 2015-08-14 19:52:15

为此,您可以使用regex:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
import os

filename = 'LT50300281984137PAC00_sr_band3.tif'
oldDate = re.sub('(LT5030028)|(PAC00_sr_band3.tif)','',filename) # Extracts the old date
# calculate new date from old date
# newDate = '1984-05-17 00:00:00'
newDate = re.sub('(-)|( .*)','',newDate) # Removes the dashes and the time
newFilename = filename.replace(oldDate,newDate) # Replaces the old date by the new date

os.rename(filename, newFilename) # renames the file to the new file name
票数 1
EN

Stack Overflow用户

发布于 2015-08-14 20:12:22

一旦你有了yeardaystrftime方法就会给出你的结果。对于1984和137,你会得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import datetime

date=datetime.date(year,1,1)+datetime.timedelta(day)
printf(date.strftime("%4Y%2m%2d"))

19840517

因此,您现在可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
newFilename = oldFilename[:9] + date.strftime("%4Y%2m%2d") + oldFilename[16:]
票数 0
EN

Stack Overflow用户

发布于 2015-08-14 21:48:13

要将字符串转换为date对象,请使用datetime.strptime()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from datetime import datetime
>>> datetime.strptime('1985137', '%Y%j')
datetime.datetime(1985, 5, 17, 0, 0)
>>> datetime.strptime('1984137', '%Y%j')
datetime.datetime(1984, 5, 16, 0, 0)

注意:输入有不同的解释:1984137在这里是1984-05-16 (137被解释为一年中的某一天,其中1月1日是第1天),而您问题中的datetime(year, 1, 1) + timedelta(day)公式暗示day是从零开始的(在两种情况下,2月29日都被计算在内)。

要将date对象转换为字符串,请使用.strftime()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> datetime(1985, 5, 17, 0, 0).strftime('%Y%m%d')
'19850517'

要替换文件名中的固定位置,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> filename = 'LT50300281984137PAC00_sr_band3.tif'
>>> filename[9:16]
'1984137'
>>> new_name = filename[:9] + '19840516' + filename[16:]
>>> new_name
'LT503002819840516PAC00_sr_band3.tif'

如果目标可能位于不同的文件系统上,则要重命名文件,请使用shutil.move()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import shutil
>>> shutil.move(os.path.join(src_dir, filename), os.path.join(dest_dir, new_name))

如果目标文件可能已经存在,则调用os.remove(dest_path)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32017624

复制
相关文章
浅析XML外部实体注入
文章首发于跳跳糖社区https://tttang.com/archive/1716/
用户9691112
2023/05/18
2.2K0
浅析XML外部实体注入
XML外部实体注入学习
刚开始学习网络安全的时候接触过XML外部实体注入,不过当时没有博客,今天在刷题的时候又碰到了关于XML外部实体注入的知识点,就想博客上也没有就简单的写一篇吧,为了以后再学习的时候能够用到。
ly0n
2020/11/04
8200
XML外部实体注入学习
Rafy 领域实体框架简介
按照最新的功能,更新了最新版的《Rafy 领域实体框架的介绍》,内容如下: 本文包含以下章节: 简介 特点 优势 简介 Rafy 领域实体框架是一个轻量级 ORM 框架。 与一般的 ORM 框架不同的是,它不只关注于一般性的面向对象实体与关系数据库的映射,而是更关注于富领域模型(聚合实体)与关系数据库的映射。使得开发者可以非常方便地使用富领域模型的同时,配备强大的实体属性设计、查询功能,并兼顾了极高的开发效率。 该框架可脱离 Rafy 框架其它组件独立运行,同时集领域驱动设计、面向服务架构、模型驱动架构、产
用户1172223
2018/01/30
1.4K0
java xml与实体类转换「建议收藏」
@XmlRootElement注解定义xml的根节点 通过name改变根节点的xml值
全栈程序员站长
2022/09/16
2.2K0
XXE-XML外部实体注入-知识点
XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令等 当使用了低版本php,libxml低于2.9.1或者程序员设置了libxml_disable_entity_loader(FALSE)就可以加载外部实体
用户9006224
2022/12/21
8150
XXE-XML外部实体注入-知识点
Web漏洞|XXE漏洞详解(XML外部实体注入)
在学习XXE漏洞之前,我们先了解下XML。传送门——> XML和JSON数据格式
谢公子
2022/01/20
2.3K0
Web漏洞|XXE漏洞详解(XML外部实体注入)
(PDF.NET框架实例讲解)将任意复杂的SQL查询映射成实体类
通常情况下我们的ORM框架都是将单表或者视图映射成一个实体类,有时候也会将存储过程映射成实体类,如果处于系统移植性的考虑,你不想写存储过程,那这些复杂的SQL查询怎么映射成实体类? 实际上,不管是单表,视图,存储过程,SQLSERVER的表值函数,自定义的SQL查询,甚至是任意复杂的SQL查询,都可以用一个SQL语句来表示,只要我们的ORM框架能够实现将SQL语句的查询结果映射成实体类,那么使用ORM就很简单了。我们使用PDF.NET(PWMIS数据开发框架)来实例讲解一下这个过程。 1,首先下载并安装一个
用户1177503
2018/02/26
2.5K0
(PDF.NET框架实例讲解)将任意复杂的SQL查询映射成实体类
使用PDF.NET数据开发框架的实体操作语言OQL构造复杂查询条件
PDF.NET数据开发框架(Pwmis Data develop Framework,http://www.pwmis.com/sqlmap) 是一套借鉴iBatis、Hibernate、Linq等数据访问框架而来的轻量级数据开发框架,主要特点是具有iBatis特点的SQL-MAP功能和框架独特的实体对象查询语言--OQL,下面我们使用OQL来构造一个复杂的实体查询。 首先定义两个实体类:用户类和订单类,可以使用框架提供的实体类生成器生成,下面是详细代码: /*   本类由PWMIS 实体类生成工具(Ver
用户1177503
2018/02/26
1.7K0
xml 中 sql 模糊查询 like
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131044.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/11
1.6K0
ADO.NET 实体框架概述
随着.NET Framework 3.5 SP1和Visual Studio 2008 SP1的正式发布。ADO.NET 实体框架正式来到开发人员的面前,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据。实体框架有助于将逻辑数据架构抽象为概念模型,并且允许以多种方式通过对象服务和名为“EntityClient”的新数据提供程序与概念模型交互。 实体框架组件 实体框架使开发人员可以编写更少的数据访问代码,减少维护,将数据结构抽象化为更易于开展业务(标准化程度较低)的方式,并且有利于数据的持久
张善友
2018/01/30
1.4K0
ADO.NET 实体框架概述
Rafy 领域实体框架 - 树型实体功能(自关联表)
在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解。 场景 在开发数据库应用程序时,往往会遇到自关联表的场景。例如,分类信息、组织架构中的部门、文件夹信息等,都是不
用户1172223
2018/01/29
1.6K0
Rafy 领域实体框架 - 树型实体功能(自关联表)
开源实体映射框架EmitMapper介绍
EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/。
跟着阿笨一起玩NET
2018/09/20
1.3K0
java xml解析框架_JAVA解析xml的五种方式对比
本篇文章主要对比Java即系xml的五种方式,这五种方式各有利弊,大家可以看情况采用哪一种。
全栈程序员站长
2022/09/05
1.7K0
Rafy 升级:支持只查询实体的部分属性
Rafy 3.80.4005 添加了新功能:支持只查询部分属性的方式来查询实体。 本文记录对应的设计: 需求 测试用例 设计-API 设计-实现 代码实现 接下来就是实现内部的代码。完成之后,所有单元测试通过。
用户1172223
2021/10/26
6260
实体中时间类型LocalDateTime,查询的时候mybatis报错
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149340.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/04
6820
JAVA框架中XML文件
我们应该在开头写返回结果 resultMap id="自己起的名字" type="返回的结果类型,此处为Department实体类"
阮键
2019/08/07
7630
springboot之参数校验---------validation 多实体接受参数pom.xml引入依赖 controller实体
如果实体需要两个实体类接受参数一个为user一个为role实体,可以嵌套验证
用户5899361
2020/12/07
1.5K0
mybatis xml 格式化时间查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160139.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
1.5K0
使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器
来源:BypassingXSSFiltersusingXMLInternalEntities 原作者:DavidLitchfield (david@davidlitchfield.com) 译:Holic (知道创宇404安全实验室) tl;dr 若 Web 应用在后端处理了一些 XML 文件,而且存在 XSS 漏洞的话,那么或许能使用 XML 实体来绕过常用 web 浏览器的 XSS 过滤器,比如Chrome, IE 和 Safari 浏览器。同样在 Firefox 浏览器下依然有效,不过显然它没有 XS
Seebug漏洞平台
2018/03/29
1.4K0
使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器
Rafy 框架 - 大批量导入实体
某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中。虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多时,效率就会很低。所以 Rafy 设计了批量导入插件程序,其内部使用 ADO.NET 及 ODP.NET 中的批量导入机制来把大量数据一次性导入到数据库中。 使用方法 步骤 由于批量导入功能是一个额外的程序集,所以在使用该功能时,需要先使用 NuGet 引用最新版本的 Rafy.Domain.ORM.BatchSubmit 程序集。 如果准备导入
用户1172223
2018/01/29
1.3K0

相似问题

Android:未使用Firebase消息向用户发送通知

10

使用Firebase发送消息

18

如何更改Firebase身份验证中发送的消息的语言

224

Firebase消息传递-测试消息不发送

10

Firebase消息发送和接收

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文