从字符串中获取文件名和日期时间

Posted

技术标签:

【中文标题】从字符串中获取文件名和日期时间【英文标题】:Get filename and date time from string 【发布时间】:2017-04-26 19:59:15 【问题描述】:

我有以下格式的文件名:name_2016_04_16.txt

我正在使用 python3,我想从这个文件中提取两件事。前缀,或作为字符串的名称值和作为字符串中表示的日期的 DateTime 值的日期。对于上面的例子,我想提取:

文件名:字符串形式的名称

日期:04/16/2016 作为日期时间

我会将这些值保存到数据库中,因此我希望 DateTime 变量对 sql 友好。

有没有图书馆可以帮助我做到这一点?或者有没有一种简单的方法来解决这个问题?

我按照建议尝试了以下方法:

filename = os.path.splitext(filename)[0]
        print(filename)
        filename.split("_")[1::]
        print(filename)
        '/'.join(filename.split("_")[1::])
        print(filename)

但它输出:

name_2016_04_16  
name_2016_04_16  
name_2016_04_16

并没有真正提取姓名和日期。

谢谢!

【问题讨论】:

你自己有没有为此努力过? 我可以使用 os.path 模块从整个文件路径中获取它,但我一直坚持从剩余的字符串中获取这两个值。 【参考方案1】:

我会先去掉文件扩展名,然后用下划线分割,删除“名称”字段。最后,我会通过斜杠加入(也许可以记录这个值)并使用日期时间库解析日期

import os
from datetime import datetime

file_name = os.path.splitext("name_2016_04_16.txt")[0]
date_string = '/'.join(file_name.split("_")[1::])
parsed_date = datetime.strptime(date_string, "%Y/%m/%d")

为了让日期字符串对sql友好,我发现了这个帖子:Inserting a Python datetime.datetime object into mysql,这表明以下应该可以工作

sql_friendly_string = parsed_date.strftime('%Y-%m-%d %H:%M:%S')

【讨论】:

我尝试了您的建议并更新了我的帖子,但它只删除了扩展名,其余的没有做。 FlameDra:在您发布的示例中,您将变量 filename 打印了 3 次...我将答案编辑得更清楚了【参考方案2】:

干脆这样做怎么样?

filename = 'name_2016_04_16.txt'
date = filename[-14:-4] # counting from the end will ensure that you extract the date no matter what the "name" is and how long it is
prefix = filename [:-14]

from datetime import datetime

date = datetime.strptime(date, '%Y_%m_%d') # this turns the string into a datetime object

(不过,这适用于 Python 2.7,如果适用于 Python 3,您需要自己寻找。)

【讨论】:

【参考方案3】:

您可以在“.”上拆分文件名然后在“_”上再次拆分。这应该给你一个字符串列表。第一个是名称,第二个到第四个分别是年、月和日。然后将日期转换为 SQL 友好的形式。

类似这样的:

rawname ="name_2016_04_16.txt"
filename = rawname.split(".")[0] #drop the .txt
name = filename.split("_")[0] #provided there's no underscore in the name part of the filename
year = filename.split("_")[1]
month = filename.split("_")[2]
day = filename.split("_")[3]
datestring = (month,day,year) # temp string to store a the tuple in the required order 
date = "/".join(datestring) #as shown above
datestring = (year,month,day)
SQL_date = "-".join(datestring ) # SQL date
print name
print date
print SQL_date

除非你想使用 datetime 库来获取 datetime 日期,在这种情况下查找 datetime 库 然后你可以这样做:

SQL_date = datetime.strptime(date, '%m/%d/%Y')

这是我现在能想到的最明确的方式。我敢肯定有更短的方法:)

抱歉格式错误,我在手机上发帖。

【讨论】:

我得到一个类型错误:当我尝试创建日期时,join() 只接受一个参数(给定 3 个)。 很抱歉,我在手机上打出来的,无法测试。 @Lloyd Kirk 有我在回复中提到的简短而优雅的解决方案 :)

以上是关于从字符串中获取文件名和日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何从char *获取pdf文件的最后写入日期(文件在内存中)

是否可以从资产文件中获取上次修改日期?

使用 Pig latin 从文件中获取最大日期

如何从 Windows Mobile 上的 C# 文件中获取修改日期?

无法从存储在照片库中的屏幕截图 png 文件中获取创建日期

OSX - 如何从命令行获取文件的创建和修改时间