在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
如何编写代码以自动化和打开最新文件
答案 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.pdf
和file(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")