在 python 中排序文件和解析文件名

sort files and parse filenames in python

我有一个 csv 文件的文件夹,名称表示一个男孩在暑假期间每天回家的日期和时间:例如 andrew201507011700.csv 告诉我他在七月的第一个 17:00。所以我的目标是对文件夹中的文件进行排序,然后提取文件名中指示的时间戳。

例如文件夹中的文件:

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

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

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

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

datetime
2015:06:02:19:30

我尝试了下面的方法,首先将文件名拆分并根据数值排序,然后得到其基本名称的最后12个字符:

path_sort=sorted(os.listdir(path),key=lambda x: int(x.split('w')[0]))
for i in path_sort:
    fi=os.path.join(path_sort, i)
    return os.path.basename(fi)[-12:]

在我看来这是错误的,我没有使用任何日期时间方法来对文件进行排序,而且它已经为这一行抛出了一个错误 fi=os.path.join(path_sort, i)

AttributeError: 'list' object has no attribute 'endswith'

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

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