Каков подходящий способ получения файлов, в которых есть имя файла с меткой времени?

#python-3.x #datetime #filenames

#python-3.x #дата и время #имена файлов

Вопрос:

Каков подходящий способ принимать файлы, в которых есть имя файла с меткой времени, и правильно читать? Один из способов, о котором я думаю до сих пор, — объединить эти имена файлов в один текстовый файл для одновременного чтения. Например, имена файлов, такие как

 1573449076_1570501819_file1.txt
1573449076_1570501819_file2.txt
1573449076_1570501819_file3.txt
  

Перейдите в файл с именем filenames.txt

Затем что-то вроде

 with open('/Documents/filenames.txt', 'r') as f:
for item in f:
    if item.is_file():
        file_stat = os.stat(item)
        item = item.replace('n', '')
        print("Fetching {}".format(convert_times(file_stat)))
  

Мой вопрос в том, как мне поступить, чтобы я мог правильно прочитать имена в текстовом файле, учитывая, что у них есть метки времени в реальных именах? Как только я это выясню, я смогу их преобразовать.

Ответ №1:

Если вы просто хотите получить временные метки из имен файлов, предполагая, что все они используют одно и то же соглашение об именовании, вы можете сделать это следующим образом:

 import glob
import os
from datetime import datetime

# Grab all .txt files in the specified directory
files = glob.glob("<path_to_dir>/*.txt")

for file in files:
    file = os.path.basename(file)
    # Check that it contains an underscore
    if not '_' in file:
        continue
    # Split the file name using the underscore as the delimiter
    stamps = file.split('_')
    # Convert the epoch to a legible string
    start = datetime.fromtimestamp(int(stamps[0])).strftime("%c")
    end = datetime.fromtimestamp(int(stamps[1])).strftime("%c")
    # Consume the data
    print(f"{start} - {end}")
    ...
  

Вы захотите добавить некоторую проверку и обработку ошибок; например, если первый или второй индекс в stamps массиве не является анализируемым int , это приведет к сбою.

Комментарии:

1. Временные метки указаны в реальных именах, поэтому это не был случай использования datetime для указания времени создания файлов, что усложнило мне задачу. Это было действительно полезно