从字符串中获取文件名和日期时间
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文件的最后写入日期(文件在内存中)