如何编写代码以根据最新修改日期自动打开目录中的最新文件?

时间:2018-11-06 05:07:52

标签: python python-3.x

在Python中,我必须编写一个代码,该代码从目录中选择以某个字符串开头的文件,并且有多个同名文件,我需要每个文件的最新修改日期。敌人示例我有一个名为

的文件
StockPriceReport06112018.pdf    #First saved report in the mrng
StockPriceReport06112018(2).pdf #Updated report saved in same folder in the aftn
StockPriceReport06112018(3).pdf #Updated report saved in same folder in the evening

如何编写代码以自动化和打开最新文件

2 个答案:

答案 0 :(得分:0)

如果您要以提供的格式打开版本号最大的文件,则可以继续尝试打开版本号越来越大的文件,直到该文件不存在并且收到FileNotFoundError

try:
    version = ''
    version_number = None
    with open('file_name%s.pdf' % version) as f:
        pass

    version_number = 1
    while True:
        with open('file_name(%s).pdf' % version_number) as f:
            pass
        version_number += 1

except FileNotFoundError:
    if version_number is None:
        latest_file_name = 'file_name%s.pdf' % version
    else:
        latest_file_name = 'file_name(%s).pdf' % version

这假定您的文件版本号是一个连续的范围,这意味着您不会在文件夹中丢失文件的特定版本。因此,要找到file(3).pdf,您需要将file.pdffile(2).pdf都存储在同一文件夹中。

答案 1 :(得分:0)

我将根据计算机文件系统上的修改时间打开文件。 这涉及到创建一个递归文件列表,然后在每个文件上调用stat()以获取最后修改日期:

编辑:我误解了问题,您实际上想要的是最新的文件(我正在寻找最旧的文件)

import os
import sys
import glob

DIRECTORY='.'

### Builds a recursive file list, with optional wildcard match
### sorted so that the oldest file is first.
### Returns the name of the oldest file.
def getNewestFilename(path, wildcard='*'):
    age_list = []
    # Make a list of [ <modified-time>, <filename> ]
    for filename in [y for x in os.walk(path) for y in glob.glob(os.path.join(x[0], wildcard))]:
        modified_time = os.stat(filename).st_mtime
        age_list.append([modified_time, filename])

    # Sort the result, oldest-first
    age_list.sort(reverse=True)
    if (len(age_list) > 0):
        return age_list[0][1]
    else:
        return None


latest_file = getNewestFilename(DIRECTORY, 'StockPriceReport*.pdf')
if (latest_file != None):
    print("Newest file is [%s]" % (latest_file))
    data = open(latest_file, "rb").read()
    # ...
else :
    print("No Files")