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

时间:2016-12-12 00:15:26

标签: python

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

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

filename:name as a String

日期:2016年4月16日作为日期时间

我将这些值保存到数据库中,所以我希望DateTime变量是sql友好的。

是否有可以帮助我这样做的图书馆?或者有一种简单的方法可以解决这个问题吗?

我按照建议尝试了以下内容:

class A {
   //some methods
} 

class B {
   //some methods
}

class AwithB {
   private A a;
   private B b;

   //implement methods of A using a
   ...

   //implement methods of B using b
   ...
}

但它输出:

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

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

谢谢!

3 个答案:

答案 0 :(得分:2)

我先删除文件扩展名,然后用下划线拆分,删除'name'字段。最后,我将以斜线加入(可能会记录此值)并使用日期时间库解析日期

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')

答案 1 :(得分:0)

如何简单地这样做?

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,则需要自行查找。)

答案 2 :(得分:0)

您可以在“。”上拆分文件名。然后在“_”上再次拆分。这应该给你一个字符串列表。第一个是名称,第二个到第四个分别是年,月和日。然后将日期转换为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

除非您想使用日期时间库来获取日期时间日期,否则请查看日期时间库 然后你可以这样做:

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

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

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