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

2024-10-05 17:30:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,对于文件夹中的文件:

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

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

^{pr2}$

然后,迭代这个已排序的文件列表,将时间戳提取为每个内部数据帧的列,例如,对于file 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:]

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

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


Tags: 文件csvpath方法文件夹datetime排序os
1条回答
网友
1楼 · 发布于 2024-10-05 17:30:54

请尝试以下操作:(如果您不确定所有文件名的格式相同,则可能会对正则表达式进行更多清理)

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

相关问题 更多 >