从di获取最新文件(多于1个)

2024-10-01 17:39:43 发布

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

我正在尝试提取最新的“apple”、“pear”和其他.csv文件,这些文件存储在python的一个目录中。新文件以相同的前缀存储,但频率不同(例如,apple\ U大约每5天更新一次)。查看类似于latestfile = max(filenames, key=os.path.getctime)但类别.startwith的内容?具体-所以我会拉唯一的瓜如果有一个,即使它是保存了几个月前。你知道吗

    """
fileDir contains csv files such as:

pear_20171102_report2.csv
apple_20171027_report2.csv
orange_20171101_report2.csv
kiwi 20171102 report2.csv
pear_20171101_report2.csv
cherry 20171101 report2.csv
kiwi 20171101 report2.csv
cherry 20171031_report2.csv
mango 20171001 report2.csv
apple_20171101_report2.csv
apple_20171102_report2.csv
...
"""

import glob
import os
import re

fileDir = r'\\ac2knyc05\TestData/'

filenames = glob.glob(fileDir+'*')
regex = re.compile(r'\d{8}')
dates = []
prefix = []

for filename in filenames:
    try:
        date = regex.search(filename).group()
        dates.append(date)
        prefix.append(filename.split(date)[0])

    except AttributeError:
        print(filename)

latestfile = max(filenames, key=os.path.getctime)

print(set(prefix)) 

困在这里,不知道怎么走,也许是熊猫?你知道吗


Tags: 文件csvimportappledateprefixosfilename
2条回答

不需要熊猫。您可以简单地将这些文件名放在列表中:

filenames = """pear_20171102_report2.csv
apple_20171027_report2.csv
orange_20171101_report2.csv
kiwi 20171102 report2.csv
pear_20171101_report2.csv
cherry 20171101 report2.csv
kiwi 20171101 report2.csv
cherry 20171031_report2.csv
mango 20171001 report2.csv
apple_20171101_report2.csv
apple_20171102_report2.csv"""

categories = {}
for filename in filenames.split("\n"):
    start_with = filename.split(' ')[0].split('_')[0]
    categories.setdefault(start_with, []).append(filename)

print(categories)
# {'pear': ['pear_20171102_report2.csv', 'pear_20171101_report2.csv'], 'apple': ['apple_20171027_report2.csv', 'apple_20171101_report2.csv', 'apple_20171102_report2.csv'], 'orange': ['orange_20171101_report2.csv'], 'kiwi': ['kiwi 20171102 report2.csv', 'kiwi 20171101 report2.csv'], 'cherry': ['cherry 20171101 report2.csv', 'cherry 20171031_report2.csv'], 'mango': ['mango 20171001 report2.csv']}

对于每个类别,现在都有一个可以按ctime排序的列表。你知道吗

不需要熊猫,您可以使用itertools groupby

from itertools import groupby

def key(filename):
    return filename.replace(" ", "_").split("_")[0]

{k: max(g, key=os.path.getctime)
     for k, g in groupby(sorted(filenames, key=key), key)}

同时给你一本最新文件的分类词典。你知道吗


注意:您可以通过for循环在一次传递中获得:

res = {}
for f in filenames:
    k, t = key(f), os.path.getctime(f)
    if k not in res:
        res[k] = f, t
    else:
        _, t_ = res[k]
        if t > t_:
            res[k] = f, t

[f for f, _ in res.values()]  # list of the latest file for each category

相关问题 更多 >

    热门问题