Python: у меня есть текстовый файл, и мне нужно отсортировать данные даты и времени в порядке возрастания

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