我有一个目录,其中包含以下文件,例如用途。
Directory:
ERROR_AM_INMAG_Export_2016-07-25.csv
AM_INMAG_Export_2016-07-26_done.csv
ERROR_AM_INMAG_Export_2016-07-27.csv
AM_INMAG_Export_2016-07-28_done.csv
AM_INMAG_Export_2016-07-29.csv
file1
file2
fileN
在这里我如何检索以""&_ 34; AM_INMAG_Export _"开头的文件?它应该有使用 Python 的最新时间戳。 例如:" AM_INMAG_Export_2016-07-29.csv"是我想要检索的文件。 但" fileN"是目录中最新修改的文件。
答案 0 :(得分:1)
files = glob.glob('AM_INMAG_Export_*.csv')
sorted_files = sorted(files, key=lambda x: int(x.split('_')[3].split('.')[0]))
答案 1 :(得分:0)
import glob
print( glob.glob('AM_INMAG_Export_????-??-??.csv')[-1] )
如果名称中定义的时间实际上是更新时间,则此方法有效。否则,您应该使用os.stat来查找
import glob
import os
def find_last_updated(pattern):
def find_updated(ff):
return os.stat(ff).st_mtime
last = None
last_updated = 0
for ff in glob.glob(pattern):
ff_updated = find_updated(ff)
if last == None or ff_updated > last_updated :
last = ff
last_updated = ff_updated
return last
print(find_last_updated('AM_INMAG_Export-????-??-??.csv'))
答案 2 :(得分:0)
因此,您需要使用正则表达式将日期作为组项目。一旦你拥有了所有的组,你需要将它转换为python日期,然后检查哪一组具有最大的日期。
import re
pat = re.compile("^AM_INMAG_Export_(.+)\.csv$")
matches = pat.match(your_data)
这是您将要使用的正则表达式,您可以详细了解分组并获得您正在寻找的实际日期格式。
答案 3 :(得分:0)
过滤与所需前缀匹配的文件,然后排序。
>>> files = """ERROR_AM_INMAG_Export_2016-07-25.csv
... AM_INMAG_Export_2016-07-26_done.csv
... ERROR_AM_INMAG_Export_2016-07-27.csv
... AM_INMAG_Export_2016-07-28_done.csv
... AM_INMAG_Export_2016-07-29.csv
... file1
... file2
... fileN""".split('\n')
>>> files
['ERROR_AM_INMAG_Export_2016-07-25.csv', 'AM_INMAG_Export_2016-07-26_done.csv ', 'ERROR_AM_INMAG_Export_2016-07-27.csv', 'AM_INMAG_Export_2016-07-28_done.csv ', 'AM_INMAG_Export_2016-07-29.csv', 'file1', 'file2', 'fileN']
>>> filtered_files = [ x for x in files if x.startswith('AM_INMAG_Export_')]
>>> sorted_files = sorted(filtered_files,reverse=True)
>>> sorted_files[0]
'AM_INMAG_Export_2016-07-29.csv'
<强>更新强>
使用正则表达式过滤文件名,然后排序。
>>> import re
>>>
>>> files = [
... 'ERROR_AM_INMAG_Export_2016-07-25.csv',
... 'AM_INMAG_Export_2016-07-26_done.csv',
... 'ERROR_AM_INMAG_Export_2016-07-27.csv',
... 'AM_INMAG_Export_2016-07-28_done.csv',
... 'AM_INMAG_Export_2016-07-21.csv',
... 'AM_INMAG_Export_2016-07-25.csv',
... 'AM_INMAG_Export_2016-07-29.csv',
... 'file1',
... 'file2',
... 'fileN'
... ]
>>>
>>> file_re = re.compile(r'^AM_INMAG_Export_\d{4}-\d{2}-\d{2}.csv$')
>>> filtered_files = [ x for x in files if file_re.match(x)]
>>> sorted_files = sorted(filtered_files,reverse=True)
>>> sorted_files[0]
'AM_INMAG_Export_2016-07-29.csv'
答案 4 :(得分:0)
使用glob
获取文件,然后将文件名从最早的文件排序到最旧的文件:
files = glob.glob('<YOUR_DIRECTORY>/AM_INMAG_Export_*') # the file prefix + '*' as regex
files.sort(reverse=True) # sort and use 'reverse=True' to get a list of files sorted by the earliest to the oldest
your_precious_file = files[0] # the one with the oldest date
注意:这里的假设是所有文件都有相同的前缀和后期修复,差异是由于日期。
答案 5 :(得分:0)
使用glob.glob()获取的文件列表可以使用sorted语句进行排序。请参阅以下示例
import os
import glob
def main():
"""
Sort csv Files.
"""
for f in sorted(glob.glob(os.path.join('AM_INMAG_Export_*.csv')), reverse=True):
print("File " + f)
if __name__ == "__main__":
main()