#python-3.x
#python-3.x
Вопрос:
У меня есть код Python (3.x), подобный этому. Код считывает данные из базы данных и записывает в текстовый файл (file2.text), дата которого является именем папки и датой последнего изменения. Мне нужно отсортировать данные по дате последнего изменения путем сортировки по возрастанию.
Я пробовал код для сортировки, но он не работает.
` Мой текстовый файл содержит эту информацию
Foldername: last modified:
AR112 2018-06-21 11:42:45
AR231 2018-07-06 14:25:10
AR234 2018-06-28 15:10:54
AR784 2018-07-06 14:25:40
AR142 2018-04-26 10:35:59
AR147 2018-06-21 11:56:26
OTHER 2018-12-10 13:18:21
*** Last folder created by MC1 at *** :Fri Mar 15 10:41:26 2019
и я хотел бы получить это ниже (сортировка даты / времени по возрастанию) и записать обратно в текстовый файл
Foldername: last modified:
AR142 2018-04-26 10:35:59
AR112 2018-06-21 11:42:45
AR147 2018-06-21 11:56:26
AR234 2018-06-28 15:10:54
AR231 2018-07-06 14:25:10
AR784 2018-07-06 14:25:40
OTHER 2018-12-10 13:18:21
*** Last folder created by MC1 at *** :Fri Mar 15 10:41:26 2019`
Here is my code.
— Тест работает
#print("Folder is : ",time.ctime(max(os.stat(r).st_mtime for r, d, _ in os.walk(thisdir))))
all_subdirs = (d for d in os.listdir(thisdir) if os.path.isdir(d))
latest_subdir = max(all_subdirs, key=os.path.getmtime, _ )
#latest_subdir = max((os.path.getmtime(f), f) for f in all_subdirs)[1]
print("XXXX=",latest_subdir)
# --- End working
Ответ №1:
Вот мое решение: прочитайте все строки, отсортируйте их по дате и запишите их обратно в файл. Чтобы не спотыкаться о первую и последнюю строки, я обработал их отдельно, но вы также могли бы удалить их из строк раньше.
from datetime import datetime
with open("my_file") as f:
lines = f.readlines()
def sort_key(line):
if line.startswith("Folder"):
return 0 # put this at the beginning
elif line.startswith("***"):
return float("inf") # infinity; put this at the end
date_str = line.strip().split(maxsplit=1)[1]
date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
return date.toordinal()
lines.sort(key=sort_key)
with open("new_file", "w") as f:
for line in lines:
f.write(line)
f.write("n")
Комментарии:
1. Привет, L3viathan, извините, я ошибся, поместив свой код в поле ответа. Я удалил его сейчас. Спасибо за вашу помощь. Позвольте мне попробовать настроить ваш код в моей задаче.
2. Пожалуйста, примите ответ, если он решил вашу проблему, поставив зеленую галочку рядом с ним.