在python中对文件进行排序和解析文件名

时间:2016-02-28 23:34:45

标签: python sorting parsing datetime filenames

我有一个带有csv文件的文件夹,其中的名字表示每个男孩在暑假期间每天回家时的日期和时间:例如[root@fedora_container /]# cat /etc/redhat-release Fedora release 23 (Twenty Three) [root@centos_container /]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 告诉我他在7月1日17:00回家。所以我的目标是对文件夹中的文件进行排序,然后提取文件名中指示的时间戳。

例如文件夹中的文件:

JSONArray JArray = new JSONObject(stringBuffer.toString()).getJSONArray("friends");

我想根据这些时间戳对它们进行排序:

andrew201507011700.csv

然后,迭代这个已排序的文件列表,将时间戳提取为每个内部数据帧的列,例如,对于文件andrew201509030515.csv andrew201507011700.csv andrew201506021930.csv andrew201508110000.csv ,获取具有一些基本本机python日期时间格式的列:

andrew201506021930.csv
andrew201507011700.csv
andrew201508110000.csv
andrew201509030515.csv

我尝试了以下方法,首先根据数值拆分文件名和排序,然后获取其基本名称的12个最后一个字符:

andrew201506021930.csv

在我看来错了,我没有使用任何日期时间方法对文件进行排序,而且它已经为此行引发了一个错误datetime 2015:06:02:19:30

  

AttributeError:'list'对象没有属性'endswith'

1 个答案:

答案 0 :(得分:1)

试试这个:(如果您不确定所有文件名的格式是否相同,也可以将正则表达式清理一下)

from os import listdir
from os.path import isfile, join
import re

def extract_number(string):
    r = re.compile(r'(\d+)')
    return int(r.findall(string)[0])

MyDir = 'exampls/'
onlyfiles = [f for f in listdir(MyDir) if isfile(join(MyDir, f))]
sortedFiles = sorted(onlyfiles ,key=lambda x: extract_number(x) )