#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 для указания времени создания файлов, что усложнило мне задачу. Это было действительно полезно