Forum Linux.pl

Programowanie => Języki skryptowe => Wątek zaczęty przez: jaro~123 w 2016-07-08, 10:29:08

Tytuł: porównanie daty utworzenia pliku z datą systemową
Wiadomość wysłana przez: jaro~123 w 2016-07-08, 10:29:08
Witam,
proszę o pomoc w napisaniu w python'ie funkcji która określiła by w dniach różnicę między datą utworzenia pliku a datą bieżącą.
a przy okazji, jeżeli skrypt w pytonie i plik jest w tej samej lokalizacji to czy muszę podawać całą ścieżkę dostępu do pliku? kiedyś skrypt mi działał po podaniu samej nazwy pliku, jak to zrobić? gogle coś nie chce mi podać rozwiązania :(
Tytuł: Odp: porównanie daty utworzenia pliku z datą systemową
Wiadomość wysłana przez: Paweł Kraszewski w 2016-07-08, 14:04:23
"plik jest w tej samej lokalizacji co skrypt" =/= "plik jest w tej samej lokalizacji co punkt wywołania skryptu".

Wyobraź dobie takie drzewo:

Kat1
 \
  |-Skrypt.py
  |-Plik1.txt
  |-Kat2
      \
       |-Plik2.txt
Jeżeli jesteś w katalogu Kat1 to:
* Skrypt odpalasz albo przez ./Skrypt.py albo przez /pełna/ścieżka/do/Kat1/Skrypt.py.
* Dla skryptu Plik1.txt widziany jest jako Plik1.txt  albo przez pełną ścieżkę /pełna/ścieżka/do/Kat1/Plik1.txt.
* Dla skryptu Plik2.txt widziany jest jako Kat2/Plik2.txt  albo przez pełną ścieżkę /pełna/ścieżka/do/Kat1/Kat2/Plik2.txt.

Jeżeli jesteś w katalogu Kat2 to:
* Skrypt odpalasz albo przez ../Skrypt.py albo przez /pełna/ścieżka/do/Kat1/Skrypt.py.
* Dla skryptu Plik1.txt widziany jest jako ../Plik1.txt  albo przez pełną ścieżkę /pełna/ścieżka/do/Kat1/Plik1.txt.
* Dla skryptu Plik2.txt widziany jest jako Plik2.txt  albo przez pełną ścieżkę /pełna/ścieżka/do/Kat1/Kat2/Plik2.txt.

Czyli plik jest widziany względem katalogu z którego uruchamiasz skrypt (cwd - current working directory) a nie względem katalogu, w którym jest skrypt. Oczywiście przy założeniu, że skrypt nie zmienia CWD w trakcie pracy.

A co do dat:
 * Datę modyfikacji pliku wyciągasz przez datetime.fromtimestamp(os.path.getmtime(PLIK))
 * Bieżącą datę przez datetime.now()
 * Różnicę masz przez zwykłe odejmowanie, wynik jest typu timedelta, typ ten ma metodę days zwracającą to, czego potrzebujesz.