Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #31 - 8 maja 2018, 18:00, Białystok :: http://pystok.org/pystok-31/
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Wyszukiwanie w liscie za pomoca czasu  (Przeczytany 157 razy)
« : 16:39 17/05/18 »
magic Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 44


Witam,
Mam pytanie do was , exifem wygrzebalem czasy z mojego programu teraz , nie daje sobie rady  z tym zeby wybrac tylko te , ktore mnie interesuja w przedziale czasowym wybranym w moim wypadku interval, moze ktos doswiadczony moze cos poradzic jak to przerobic nie mam zielonego pojecia i stoje w miejscu... Wybiera mi pierwsze 4ry zdjecia , ktore nie sa nawet w moim przedziale czasowym nie wiem o co chodzi cos zrobilem nie tak ...
Kod
import os, PhotoScan
 
chunk = PhotoScan.app.document.chunk
time_table = list()
for camera in chunk.cameras:
   time = camera.photo.meta['Exif/DateTimeOriginal'].split(" ")[1][:-3].replace(":", ".")
   time_table.append(time)
   #time_table.sort()
   print(time_table)
 
 
   #print(time_table)
 
   limits = (time_table[0], time_table[-1])
   interval = str(08.03)
   interval1 = str(08.05)
   start = limits[0]
   interval2 = interval + interval1
   #time = time // 1 + time  - time // 1
   if start <= str(time) < start + interval1:
       camera.selected = True
   finish = start + interval1
 
Tutaj moja lista wyglada mniej wiece tak:
Kod
['08.02', '08.02', '08.02', '08.02', '08.03', '08.03', '08.03',etc etc '10.58']
 
Zapisane
« Odpowiedz #1 : 01:11 18/05/18 »
Guaz Offline
Advanced Python User

Zobacz profil
**

Reputacja: 37
Płeć: Mężczyzna
Wiadomości: 226


Wybacz że na początek się doczepię, ale co chcesz zrobić w tej linii:
Kod:
   interval2 = interval + interval1
Bo według kodu wyjdzie coś takiego: '08.0308.05'
Ale to nadal nie ma znaczenia dla problemu, to tylko moja ciekawość, głównie błąd znajduje się w tym miejscu:
Kod:
   if start <= str(time) < start + interval1:
        camera.selected = True
start - jest stringiem.
time - jeśli to:
Kod:
['08.02', '08.02', '08.02', '08.02', '08.03', '08.03', '08.03', (...) , '10.58']
wypluwa 'print(time_table)'. Jest dla mnie niezrozumiałe. Ponieważ jeśli time byłby listą, i zrobiłbyś:
Kod:
time_table.append(time)
Wtedy wyglądałoby to tak:
Kod:
[['08.02', '08.02', '08.02', '08.02', '08.03', '08.03', '08.03',etc etc '10.58']]
Bo robisz podwójne zagnieżdżenie. Jeśli słusznie wnioskuje że time jest listą, na co wskazuje split, następnie wybranie elementu które świadczy że może to być string, i musi to być string skoro jest traktowany metodą replace, a ta nie działa dla obiektów typu list. Czyli jednak nie jest to lista jak wskazałeś wyżej... Chyba że po przebiegu wszystkich pętli for daje taki rezultat. Czyli wybierasz pojedyńcze czasy, ale w takim razie, tu nie ma żadnego miejsca w którym byś przeprowadzał rzeczywistą kontrolę tego czasu.
Wrzuć jak wygląda print z 9 linii przy każdej pętli, jak jest za długi to wrzuć txt,
Do tego możesz go lekko przerobić tak byśmy mieli ścisłość:
Kod:
print(time_table, "|", type(time), "|", time)
Wtedy myślę że będę mógł pomóc Uśmiech.

Biblioteki której używasz nie znam, ale raczej z tego prostego printa będzie dość informacji abyśmy sobie z tym poradzili Uśmiech.

~~~~~~~~~~~~~
@Edit:
Przykładowy kod który mógłby odfiltrować to co potrzebujesz:

Kod
dane_wejsciowe = ['08.02', '08.02', '08.02', '08.02', '08.03', '08.03', '08.03', (...) , '10.58']
dane_wejsciowe.sort() #~ Jeśli nie jesteśmy pewni czy są rosnące
limit_dolny = '08.03'
limit_gorny = '08.15'
dane_wyjsciowe = []
 
for sprawdzenie in dane_wejsciowe:
 if limit_dolny < sprawdzenie and sprawdzenie < limit_gorny:
   dane_wyjsciowe.append(sprawdzenie)
 elif sprawdzenie > limit_gorny:
   break #~ Przyspieszenie uwarunkowane że czasy są ułożone rosnąco.
 
Zapisane

Python 3.5.2 / Mint
« Odpowiedz #2 : 09:20 18/05/18 »
magic Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 44


Staralem sie to poprawic , wiec teraz mam cos takiego :
Kod
import os, PhotoScan
import datetime
chunk = PhotoScan.app.document.chunk
time_table = list()
for camera in chunk.cameras:
   time = float(camera.photo.meta['Exif/DateTimeOriginal'].split(" ")[1][:-3].replace(":", "."))
   #print(time)
   #time = time // 1 + (time  - time) // 1 * 100 / 60
   time_table.append(time)
   print(time_table, "|", type(time), "|", time)
'''
   #time_table.sort()
   #print(time_table)
   #time_table.sort()
   limits = (time[0], time[-1])
   interval = 08.03
   interval1 = 08.05
   start = limits[0]
   #interval2 = interval + interval1
   #time = time // 1 + time  - time // 1
   if start <= time < start + interval1:
       camera.selected = True
finish = start + interval1
'
''
 

I tutaj print z 9tej lini
Kod
2018-05-18 09:14:05 [8.02] | <class 'float'> | 8.02
2018-05-18 09:14:05 [8.02, 8.02] | <class 'float'> | 8.02
2018-05-18 09:14:05 [8.02, 8.02, 8.02] | <class 'float'> | 8.02
2018-05-18 09:14:05 [8.02, 8.02, 8.02, 8.02] | <class 'float'> | 8.02
2018-05-18 09:14:05 [8.02, 8.02, 8.02, 8.02, 8.03] | <class 'float'> | 8.03
itd itd ....
 
Nie wiem jak to ogarnac, moze nie przechodzic przez liste i zrobic to bezposrednio w programie...
Kod
import os, PhotoScan
import datetime
chunk = PhotoScan.app.document.chunk
time_table = list()
for camera in chunk.cameras:
   time = float(camera.photo.meta['Exif/DateTimeOriginal'].split(" ")[1][:-3].replace(":", "."))
   print(time)
   #time = time // 1 + (time  - time) // 1 * 100 / 60
   #time_table.append(time)
   print(type(time), "|", time)
'''
   #time_table.sort()
   #print(time_table)
   #time_table.sort()
   limits = (time[0], time[-1])
   interval = 08.03
   interval1 = 08.05
   start = limits[0]
   #interval2 = interval + interval1
   #time = time // 1 + time  - time // 1
   if start <= time < start + interval1:
       camera.selected = True
finish = start + interval1
'
''
 
i print z tego ....
 
2018-05-18 09:19:34 8.02
2018-05-18 09:19:34 <class 'float'> | 8.02
2018-05-18 09:19:34 8.02
2018-05-18 09:19:34 <class 'float'> | 8.02
2018-05-18 09:19:34 8.02
2018-05-18 09:19:34 <class 'float'> | 8.02
2018-05-18 09:19:34 8.02
2018-05-18 09:19:34 <class 'float'> | 8.02
2018-05-18 09:19:34 8.03
2018-05-18 09:19:34 <class 'float'> | 8.03
 
Zapisane
« Odpowiedz #3 : 10:44 18/05/18 »
magic Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 44


mam to masakra na 13 lini kodu , tysiac prob i dziala:
Kod
import os, PhotoScan
import datetime
chunk = PhotoScan.app.document.chunk
time_table = list()
for camera in chunk.cameras:
   time = camera.photo.meta['Exif/DateTimeOriginal'].split(" ")[1][:-3].replace(":", ".")
   time = float(time)
   time = time / 1 + (time  - time / 1) * 100 / 60
   interval = 08.03
   interval1 = 08.05
   start = interval
   if start <= time <= interval1:
       #print(start,time,interval1)
       camera.selected = True
 
Zapisane
« Odpowiedz #4 : 11:54 18/05/18 »
guest013 Offline
Advanced Python User

Zobacz profil
**

Reputacja: 14
Wiadomości: 129


time = time // 1 + (time  - time // 1) * 100 / 60

Od samego początku zastanawiam się ile wynosi time//1 i co zmienia w tym wyliczeniu ?

W pierwszej wersji było znacznie trudniej:

time = time // 1 + time  - time // 1
Zapisane

Expect nothing and you will never be dissapointed
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot