Új hozzászólás Aktív témák
-
axioma
veterán
-
axioma
veterán
válasz
Hege1234
#3579
üzenetére
ehelyett:
nums = input('\nírd ide a számokat: ').split()
nums = '\n'.join(nums)
print(nums)
ezt rakd be:nums = input('\nírd ide a számokat: ').split()
print('\n'.join(nums))
de a nums-ot ne modositd (csak hasznald fel) a "fuggoleges" kiiratashoz - mar ha kell egyaltalan neked a kiiratas... mert a program magabol a nums-bol mukodik utana, az maradjon lista (igazabol csak egy iterator, de ez most neked mind1)Viszont ha ki akarod _minden_ kivalasztott cimet iratni akkor azt csak ciklussal tudod: ehelyett:
cim = title['list'+str(nums)]['cim']
print('\n'+cim+'\n')
legyen igy:for n in nums:
cim = title['list'+n]['cim']
print('\n'+cim+'\n')
Tanulsagkeppen: az n igy mar string, nem konvertaltad szamma, nem kell me'g egyszer str.
Masreszt ezt az egeszet egyben ennyivel el lehet intezni ugy, hogy me'g hibakezeles is legyen:for n in input('\nírd ide a számokat: ').split():
listanev='list'+n
try:
print('\n'+title[listanev]['cim']+'\n')
# egyeb dolgok amit csinalni akarsz a valasztott elemmel
except KeyError:
print('\n Nem letezik a valasztott '+listanev+' elem!')
ha jol ertem azt, hogy a szamokat "fuggolegesen" csak teszt celjabol akarod kiirni... -
axioma
veterán
válasz
Hege1234
#3577
üzenetére
Akkor azt nem ertem, miert nem jo az eredeti...
Ha szokozzel akarod akkor sima split() a ',' nelkul [barmely whitespace-nel szetvagja]
Ha enterekkel akarod bekerni akkor macerasabb, ki kell elore jelolni h mi a bemenet vege [pl. ures sor], es akkor mar irsz egy normal while ciklust.
De a szokoz, parameter nelkuli split sztem a legjobb megoldas itt. Usernek kiirod hogy ugy kered, annyi... -
axioma
veterán
válasz
Hege1234
#3572
üzenetére
sztem te ezt keresed, mar ha jol ertem h kiiratni akarod for ciklus nelkul kulon sorokba (a split.("\n") arra valo h a sorvegeknel szetvagja az eredetit, az meg nalad 1 db-os lista):
print("\n".join(map(str,list)))
Masreszt ha nem kell kozben int-kent (ellenorzesnek sem!), akkorprint("\n".join(input('...').split()))Hm, lehet hogy tobb sorban megadott inputot szeretnel? Akkor viszont hogy kulonboztetne meg a felhasznalo hogy vege a bevitelnek v csak uj adatot ad be? A sorvegen tul 1 db input nem tud latni, mashogy osszerakott v pl file-bol olvasott szoveget tudsz tobbsorost kapni, interaktivan ebben a formaban nem.
-
kovisoft
őstag
válasz
Hege1234
#3563
üzenetére
Csináltam egy próbát az update()-tel és "list1"-et és "list2"-t tartalmazó dict-ekkel. Ez lett az eredmény, az update() után bekerült a dict-be mindkettő (a sortörést én adtam hozzá, hogy olvashatóbb legyen):
> d1 = {"list1":{"cim":"Családi videó....","Minőség":"SD","Képarány":"4:3","Időtartam":"01:26:24","Készült":"1993"}}
> d2 = {"list2":{"cim":"Családi videó....","Minőség":"SD","Képarány":"4:3","Időtartam":"01:26:24","Készült":"1993"}}
> print(d1)
{'list1': {'cim': 'Családi videó....', 'Minőség': 'SD', 'Képarány': '4:3', 'Időtartam': '01:26:24', 'Készült': '1993'}}
> d1.update(d2)
> print(d1)
{'list1': {'cim': 'Családi videó....', 'Minőség': 'SD', 'Képarány': '4:3', 'Időtartam': '01:26:24', 'Készült': '1993'},
'list2': {'cim': 'Családi videó....', 'Minőség': 'SD', 'Képarány': '4:3', 'Időtartam': '01:26:24', 'Készült': '1993'}} -
kovisoft
őstag
-
kovisoft
őstag
-
-
-
-
válasz
Hege1234
#3544
üzenetére
Nem egészen világos nekem, mi a probléma.
Beolvasod a json file-t, aztán az általad létrehozott dictionary-vel felülírod az első rekordot a jsonban - a seek ráadásul feleslegesnek tűnik, mert az r+ megnyitás egyébként is a file elejére pozicionálja a pointert.A linken meg írják is, hogy errort dob az r+, ha truncating nélkül nyitod meg írásra vagy olvasásra. A truncate viszont nem elérhető, ha r vagy r+ a megnyitás.
-
axioma
veterán
válasz
Hege1234
#3509
üzenetére
Nem futtattam csak nyersen irtam, typo siman lehet benne. Exception-re csak remlett hogy lehet, aktivan nem irkaltam ilyeneket csak max. copy-paste, de amugy itt van, tuple-kent lehet: [link] De ez csak az en lustasagom, szebb ha kulon van a hibauzenet a kulonbozo hibakra, nyilvan attol fugg hogy hol lesz hasznalva. [Ha log-ba menne, akkor ki kene iratni a hibauzenetben hogy mi volt az eredeti szoveges 'ans', akkor mar csak tudja a kodolo hogy az miert nem jo ott, ha nem kategorizalt a hibaszoveg akkor is.]
Az egerfigyelesrol gozom sincs, en bill.figyelest anno pascal csinaltam
ebbol kitalalhatod a koromat (also korlatjat minimum). -
axioma
veterán
válasz
Hege1234
#3506
üzenetére
Jaaa, hogy meglevo batch helyett irod, akkor mar ertem hogy hogyan kerulhetett bele ciklus...
Szerintem kicsit osszevonom neked, szolj ha nem igy ertetted a "ne lepjen ki"-t:while True:
try:
ans = input("\nírd ide a számot: ")
num = int(ans)
if 1<=num<=5:
return num-1
print("csak 1-5-ig írhatsz ide számot!")
except ValueError:
print("ide csak számot írhatsz!")
Ez igy addig nem lep ki, es raadasul szelektiv hibauzenetet ad, amig nem jo erteket ir be a user. Igy viszont kilepni lesz nehez belole (jo, ctrl-c vagy ablak becsuk).
Termeszetesen ekkor mar nem kell a kulso try-except.
Me'g egy aprocska megjegyzes: ha a pick fuggvenyed ismeri az options-t, akkor nem sok ertelme van annak, hogy az indexszel tersz vissza, lehetne egybol az ertekkel (return options[num-1]es aquality=pick(options)is egyszerusodik).Kiegeszites: ha me'gis dict-tel csinalnad akkor a szamot se kene kulon konvertalni es kulon vizsgalni, igaz kevesbe szelektiv hibauzenettel, de az egesz ide egyszerusodik:
def pick(options):
print("\nminőség kiválasztása:\n")
for idx, element in options.items():
print("{} = {}".format(idx, element))
while True:
try:
ans = input("\nírd ide a számot: ")
return options[int(ans)]
except ValueError,KeyError:
print("ide csak 1-5 egész számot írhatsz!")
options = {1:"1080", 2:"720", 3:"540", 4:"480", 5:"360"]
quality = pick(options)
print(quality)
(azert nem megy tombbel, mert a pythonban - minden mas esetben udvozlendo modon - le'tezik a negativ indexeles, tehat ha tombbel csinalnad es IndexError-t varnal, akkor a 0 beirasa az 5-os erteknek felelne meg es hiba nelkul atmenne)
(Valamint a teljes konvertalas kikerulheto, ha a dict-nek a kulcsa az '2' alakban van megadva es nem 2 szamkent. Mondjuk a szamossal me'g az 1+1 input is ervenyes, ugy meg a '2 ' - plusz szokoz - se menne at... szoval azt nem javaslom. Anno ezeket ahol megoldhato nem inputtal - valasztott szam + enter -, hanem keyboard figyelessel oldottak meg, ott akkor 1 billt nez csak meg, mar amig nincs 10-nel tobb opciod.) -
axioma
veterán
válasz
Hege1234
#3504
üzenetére
Mi a bonyolult, hogy hova keruljon a try? Az 'elore' int-eles nagyon megszokott, azt atveheted, de pont a tipustalansag miatt akar olyat is leirhatsz a bekeres utan, hogy
i=int(i)[persze jobb lenneans=input(...)es utanai=int(ans), ha mar kulonrakod, igy sokkal erthetobb-kovethetobb].
A try-ra pedig ha a 'foprogramban' nem baj hogy nem kezeled a None-t [megj. lehetne rossz valasz eseten ervenyes default is], akkor csak kozmetikai javitas. De tenyleg fugg attol, mi a kodkeszitesed celja [tananyagot kovetsz, valami meglevot akarsz sajat kutfobol szemelyre szabni, valami csak altalad hasznalt lesz es/vagy fix file-bol jon az adat nem 'eri meg' a rossz inputra felkeszulni - pl. prog.versenyeken is igy megy -, vagy valami tok mas]. Ezek fuggvenyeben jobban lehet a segitseget is kalibralni. En eddig inkabb ravezetni akartalak, nezd meg a hasznzlt kulcsszavakat mas kodban v. tutorialban. -
axioma
veterán
válasz
Hege1234
#3502
üzenetére
Az csak annyi hogy az i mar nem szoveg hanem szam lesz ha igy irod:
i = int(input("\nírd ide a számot: "))
A belso zarojelben kap egy stringet amit a kulso konvertal szamma, es azt ta'rolja.
Persze akkor a try-ban kene ez is legyen.
[Amugy ha hiba eseten return None, akkor irhatod a pass helyere.
Viszont a None-vel meg kivul bajod lesz, a try-catch lehetne a foprogram reszen, minden a try blokkban ami hasznalja az i-t - mert a hibas indexet is elkapja, except-ben meg hibauzenet.
Megjegyzem ha nem ragaszkodsz az enumerate-hez, akkor betennek egy dummy 0. elemet az options-be de csak 1-tol iratnam ki, akkor nem kell a valaszt tologatni; vagy ld. a korabbi dict-es megoldast a tombindex helyett.]
Mondjuk ha iskolai feladat akkor while ciklus kene amig nem lesz int, vagy egy megadhato 'break'. -
cousin333
addikt
válasz
Hege1234
#3498
üzenetére
Uhhh... Bevallom nem tudom, mit csinál a kódod, de sok sebből vérzik.

Erre a problémára a legegyszerűbb megoldás a szótár (dictionary) használata. Ez gyakorlatilag kulcs-érték párokat jelent, random sorrendben. A kulcs és az érték is bármilyen típus lehet (sztring is).
qualities = {'0': 1080, '1': 720, '2': 540, '3': 480}Ha úgyis csak szám-opciókat akarsz, akkor egyszerűbben is legenerálhatod:
my_list = [1080, 720, 540, 480, 360]qualities = {i: j for i, j in enumerate(my_list)}Ha mondjuk azt akarod, hogy a kulcs inkább sztring legyen, ne szám:
qualities = {str(i): j for i, j in enumerate(my_list)}print('Minőség kiválasztása\r\n')print('\r\n'.join(f'{i} = {j}' for i, j in qualities.items()))minoseg = input('\nÍrd ide a számot: ')quality = qualities[minoseg]ekkor a quality változóban benne lesz a szám, 1080, 540 vagy amit kiválasztasz.
-
axioma
veterán
válasz
Hege1234
#3498
üzenetére
Miben lehet csak szam? Az i az teny hogy jobban atlathato ha egy egesz, de pythonban [es erre vigyazz] akar a beepitett fuggvenynevet is hasznalhatod [felulcsapod!] valtozokent, ill. ua valtozo mas-mas tipust is felvehet.
Miert kell a ciklus? Nem csak egyet akarsz bekerni? Azt az egesz koztes reszt nem ertem.
Az input utan en csakprint(my_list[minoseg])-re gondolnek, ha meg tobb bekerest akarsz akkor az is belul kene legyen a ciklusban [ami nagy valoszinuseggel nem is szamlalos for hanem tesztelos while kene legyen] -
cousin333
addikt
válasz
Hege1234
#3495
üzenetére
Az univerzális megoldás valóban a try-except (lásd 8.3 fejezet). Lényegében a kritikus részt a try blokkba írod, és ha lefut, örülsz. Ha hiba van, akkor az except ág(ak) fut(nak) le. Ily módon szelektíven lehet kezelni a problémát: ha pl. a fájl nem található (lásd FileNotFoundError) akkor vállat vonsz és továbblépsz a következő fájlra, ha viszont más a hiba, akkor lehet, hogy ez nem elegendő megoldás, de jó, ha tudsz a problémáról.
A fenti példában (is) lehet célirányosabb megoldást is találni, például megvizsgálni a vtt értékét, mielőtt dolgozni kezdesz vele, hiszen a findall egyik lehetséges hibája, hogy éppenséggel nem talál semmit:
vtt = re.findall("[a-zA]...')if vtt is not None:vtt = vtt[0].strip()...A fenti esetben feltételezhető, hogy None értéket kap. De az is vizsgálható, hogy lista-e, és/vagy van-e annyi eleme, amennyi neked kell. Szívás, de a kód egy jelentős része mindig arra megy el, hogy ezeket a hibákat felderítsd és megnyugtatóan lekezeld.
-
cousin333
addikt
válasz
Hege1234
#3491
üzenetére
Azért ez egy kicsit más feladat...

Az a probléma, hogy a keys argumentumoknál egymást kéne követnie a paramétereknek (lásd a működő sorokat), vesszővel elválasztva. Nálad viszont egyetlen sztring argumentumként megy be az egész. És azért van ", mert a ' már szerepel a sztringben...
Igazából neked ez az egész konkrét művelet, amit kérdeztél, - az aposztrófokkal, meg a vesszőkkel - szükségtelen. Először is, az eredeti key.txt fájlt használd, ne az én kódommal módosítottat. Ezt a két sort
keys = fs.readlines()keys = keys[0].strip()Ezt cseréld le erre:
lines = fs.readlines()keys = lines[0].strip().split()A futtatás parancsot
debug = subprocess.run([mp4decr, keys, video, videoout])meg erredebug = subprocess.run([mp4decr, *keys, video, videoout]) -
-
axioma
veterán
válasz
Hege1234
#3460
üzenetére
A cikluson kivul ures print irja ki _csak a vegere a \n -t.
String osszerakassal, zanzasitva (bocs, mobilrol):f.write('--key '+(' --key '.join(keys)))
Persze lehet a join hasznalata nelkul ugy ahogy irtam, kulon stringbe gyujtve, csak hosszabb:st=''for key in keys:st+=' --key '+keywith open("key.txt","a+") as f:f.write(st[1:])
(a [:1] csak ha zavar a sor eleji plusz szokoz, de lehet a vegere ha ott jobban elfer) -
Hege1234
addikt
válasz
Hege1234
#3459
üzenetére
köszi, így sikerült rájönnöm, hogyan hagyjam el az end-et
for key in keys:f = open("key.txt", "a+")f.write('--key '+key+' ')f.close
felmerült még egy "probléma"
szeretném ezeket a kulcsokat amik egy sorba kerültek a legvégére egy '\n' -t tenni
viszont, ha ezt most így csinálom akkor ugyan ott vagyok ahonnan indultamfor key in keys:f = open("key.txt", "a+")f.write('--key '+key+' '+'\n')f.closehogyan lehetne azt megcsinálni, hogy egy sorba teszi és a legvégén hozzáad egy új sort
hogy következő alkalomkor is az egy sorba gyűjtött kulcsok már új sorba kerüljenek? -
cousin333
addikt
válasz
Hege1234
#3452
üzenetére
Én most ennyire jutottam. Elismerem, hogy nem a legszebb kód evör

import reregex = r'S[1-9]*[0-9]\sE[1-9]*[0-9]:?'r = re.compile(regex)def replacer(x):a, b = x.group().split()return f'S{int(a[1:]):02}E{int(b[1:]):02}'s = 'Rick and Morty - S5 E2 Mortyplicity're.sub(r, replacer, s)Ebben az esetben az s az a cím sztring. A kimenet:
'Rick and Morty - S05E12 Mortyplicity'
-
válasz
Hege1234
#3444
üzenetére
import re
f = open("log.txt_log").read()
link = re.findall(r"https?:.+\.mpd(?!\?)", f)[0].strip()
link = re.sub("_w[0-9]+", "_w999999999", link)
link = re.sub("_ps[0-9]+", "_ps0000100", link)
link = re.sub("_pd[0-9]+", "_pd60000000", link)
print(link)
print(link, file=open("final.txt", "w")) -
Hege1234
addikt
válasz
Hege1234
#3443
üzenetére
sikerült
import re
f = open("log.txt_log").read()
link = re.findall("https?:.+\.mpd(?!\?)", f)
link = link[0].strip()
print(link)
print(link, file=open("link.txt", "w"))----------------------
ebben viszont elakadtam
link.txt-t beolvasva hogyan tudnék abból az egy sorból szövegrészeket felcserélni?
3 különböző szöveget kellene felcserélni
ezt jrepl-el csak úgy lehetett megoldani, hogy 1 szöveget kicserélt elmentette
azt a fájlt behívva kicseréli a 2. at ezt megint elmenteni
majd behívni és kicserélni a 3. at is
ezt pythonnal meg lehetne oldani egyszerre?ez nem tudom lényeges-e, de esetleg ebből átláthatóbb:
set "int=_w[0-9]+"
set "int_new=_w999999999"
call "jrepl" "!int!" "!int_new!" /m /f "link.txt" /o "result1.txt"
setlocal enabledelayedexpansion
set "int=_ps[0-9]+"
set "int_new=_ps0000100"
call "jrepl" "!int!" "!int_new!" /m /f "result1.txt" /o "final.txt"
setlocal enabledelayedexpansion
set "int=_pd[0-9]+"
set "int_new=_pd60000000"
call "jrepl" "!int!" "!int_new!" /m /f "final.txt" /o -ebből:
https://stream7.nava.hu/navahu_bdrm/_definst_/amlst:mnfa-84/manifest_w1646702604_ps3854000_pd60000_qc2Vzc2lkPSZvbXE9dHJ1ZSZucD0mbGI9WDlYaVNvY3Q4dGpaJTJCRkt5UllXbWNxS1c3cWRZcDNnYmdOTUJVaks5MTduaUN4M1k5Sm1Vc2FPV0RyblFmV2pQbWdhM0FJVXFuYkdUJTBEJTBBNDZTUGRyZTAzUSUzRCUzRCUwRCUwQQ==.mpderre:
https://stream7.nava.hu/navahu_bdrm/_definst_/amlst:mnfa-84/manifest_w999999999_ps0000100_pd60000000_qc2Vzc2lkPSZvbXE9dHJ1ZSZucD0mbGI9WDlYaVNvY3Q4dGpaJTJCRkt5UllXbWNxS1c3cWRZcDNnYmdOTUJVaks5MTduaUN4M1k5Sm1Vc2FPV0RyblFmV2pQbWdhM0FJVXFuYkdUJTBEJTBBNDZTUGRyZTAzUSUzRCUzRCUwRCUwQQ==.mpdezzel megtalálható
"_w[0-9]+_ps[0-9]+_pd[0-9]+"de, hogyan lehetne felcseréltetni a benne lévő számokat mindig ezekre?
_w999999999
_ps0000100
_pd60000000 -
Hege1234
addikt
válasz
Hege1234
#3418
üzenetére
file = open("dat.txt")
lines = file.readlines()
dat = lines[0]dat.txt
i5fstZQAjiTCw6ZdzOjaSxrjwerror:
raise ValueError('Invalid header value %r' % (values[i],))
ValueError: Invalid header value b'i5fstZQAjiTCw6ZdzOjaSxrjw\naz egészbe az kavar bele, hogy ott a végén az \n vagy az, hogy nem tudom a headers-be juttattni a dat-ot?
-
válasz
Hege1234
#3358
üzenetére
filter kell neked:
file = open("characters.txt")
lines = [*filter(lambda line:len(line)<=150, file.readlines())]
characters = lines[0]ha nem kell, hogy indexelhető legyen hanem elég az iterátor, akkor nem kell listává alakítás:
file = open("characters.txt")
for line in filter(lambda line:len(line)<=150, file.readlines()):
# művelet
characters = line -
válasz
Hege1234
#3178
üzenetére
Ezekkel a linkekkel nincs semmi baj (legalább is a kapcsolat létrejön), csak a szerveroldalon van valami gond velük. A címből nem lehet megállapítani, hogy problémás-e, meg kell nézni, hogy jön-e adat a stream-en, és ha nem csak discard...
Az alábbi funkcióval ellenőrizhető, hogy megnyitható-e a cím, és hogy 5 mp-en belül jön-e adat:
def check_server(url):
try:
with requests.get(url, timeout=5, stream=True) as r:
next(r.iter_content())
return True
except requests.exceptions.ConnectionError:
return FalseA következő sor helyére tehető be az ellenőrzés:
if src:
ígyif src and check_server(src): -
válasz
Hege1234
#3159
üzenetére
Összeraktam inkább rendesen...
import requests
from bs4 import BeautifulSoup
def parse_src(text_response, src=''):
try:
soup = BeautifulSoup(text_response, 'html.parser')
for vid in soup.find_all('source'):
src = vid['src']
except:
pass
return src
def parse_text(text_response, line, src=''):
try:
return text_response.split("\n")[line]
except:
return src
m3_data = [
{
'name': 'CINE LIFE HD',
'url': 'http://streamstat.net/videoplayer.cgi?sid=14358315&ext=.m3u8',
'logo': 'https://cinelife.com/wp-content/uploads/2020/04/cinelife_logo.png',
'parser': parse_src,
'parser_args': {},
},
{
'name': 'FEM 3',
'url': 'https://onlinestream.live/fem3/videoplayer/6455-1',
'logo': 'http://1241.hu/userfiles/image/tvcsatornak/fem3.jpg',
'parser': parse_src,
'parser_args': {},
},
{
'name': 'Extreme Sports Channel',
'url': 'https://raw.githubusercontent.com/Special2020/Iptv-hu.m3u/master/Uj%20T%20A.m3u',
'logo': 'https://cdn.pngsumo.com/tv-guide-extreme-sports-channel-the-home-of-action-sports-action-sports-png-320_240.png',
'parser': parse_text,
'parser_args': {'line': 308},
},
{
'name': 'FIX TV',
'url': 'http://streamstat.net/videoplayer.cgi?sid=148177550&ext=.m3u8',
'logo': 'http://1241.hu/userfiles/image/tvcsatornak/pic_atkoto_55_fix_tv.png',
'parser': parse_src,
'parser_args': {},
},
]
exif_info = '#EXTM3U\n'
for channel in m3_data:
html_response = requests.get(channel['url'])
parser = channel['parser']
extra = channel['parser_args']
src = parser(html_response.text, **extra)
if src:
channel['src'] = src
exif_info += f'#EXTINF:0,tvg-logo={channel["logo"]}, {channel["name"]}\n{src}\n'
print(exif_info, file=open("test.m3u8", "w")) -
-
válasz
Hege1234
#3144
üzenetére
beszúrást nem tud, ahogy a többiek is írták:
- file megnyit olvsásra, beolvas sztringbe, bezár
- file megnyit írásra, beleírod az elejét, visszaírod a beolvasottat, bezár
https://stackoverflow.com/questions/4454298/prepend-a-line-to-an-existing-file-in-pythonAmúgy még mindig tartom magam az előző véleményemhez - egyáltalán nem bántásból -, de ha olyan kérdések merülnek fel, hogy miért nem ír ki valmit, amikor nem rakod bele print-be vagy write-ba a változót, akkor még csiszolj kicsit az alapokon.
-
Hege1234
addikt
válasz
Hege1234
#3137
üzenetére
with open('c:\\kodi\\save.txt', 'a+') as outfile:
outfile.write(result[1]['result']['item']['file']+'\n'+time+'\n'+result[1]['result']['item']['label']+'\n'+'----------'+'\n')
outfile.seek(0)futtatás után a seek(0) miatt nem úgy kellene működnie, hogy az új 4 sor a fájl elejére kerüljön és ne végére?
-
cousin333
addikt
válasz
Hege1234
#3127
üzenetére
Lényegét tekintve ennyi:
import datetimet = datetime.time(hour=result[0]['result']['time']['hours'], minute=result[0]['result']['time']['minutes'], second=result[0]['result']['time']['seconds'])print(t.strftime("%H %M %S"))Ha az elemek nevei nem lennének többesszámban (hours) még egyszerűbb lenne a dolog:
t = datetime.time(**result[0]['result']['time']) -
-
-
cousin333
addikt
válasz
Hege1234
#3125
üzenetére
No offense, de ez így kissé gányolásnak tűnik az elemek egyesével történő kiírásával.
A helyedben megnézném beépített a datetime modult: [link]
A kiolvasott időadatokból készítenék egy datetime objektumot, majd, közvetlenül kiírás előtt megformáznám a time.strftime() függvénnyel.A lényeg, hogy a beolvasott adatokat valami kulturált belső objektumban tárolnám, és azt dolgoznám fel, írnám ki. Javaslom például a pandas modult. Van read_json() metódusa is, bár én még azt nem használtam.
-
válasz
Hege1234
#3116
üzenetére
Igen, ahogy a kolléga is írja a visszaadott jon egy lista [ ], amiben dictionary-k vannak { }
A listán végig-iterálva szépen meg tudod nézni, hogy mi van bennük.Amúgy mivel az elküldött data is két elemet tartalmaz, így láthatóan erre a két elemre kapsz választ a response-ban. Szerintem, ha a kérésben megadsz "id":valami_egyedi_szám mezőt is, akkor a válaszokat ehhez hozzá tudod majd kötni.
-
JoinR
őstag
válasz
Hege1234
#3116
üzenetére
Nem konzisztens, amit írsz; keverjük a result és resp változót.
Ha aprint(result)az egy lista, ahogy itt írod, akkor csak integerrel tudsz hivatkozni (pl.result[0]) egy adott elemére. Viszont a resp-es kódrészletben meg key-re hivatkozol (resp['result']), mivel ott már a beágyazott dict-be kerülsz valahogy.Ha a result egy dict-ek listája, akkor meg kell keresned, hogy melyik elemében (azaz melyik dict-ben) van
timekey és melyikbenitemkey.
Pl:result = [{"id":17,"jsonrpc":"2.0","result":{"time":{"hours":0,"milliseconds":416,"minutes":52,"seconds":59}}},{"id":18,"jsonrpc":"2.0","result":{"item":{"file":"smb://192.168.1.10/n filmek 720p/@.mkv","id":340,"label":"The Expendables 3","type":"movie"}}}]for i in result:if i['result'].get('time'):mytime = i['result']['time']if i['result'].get('item'):myfile = i['result']['item']['file']print(mytime)print(myfile) -
válasz
Hege1234
#3114
üzenetére
Hogyan került bele a resp-be a result? az nem látszik a kódból...
mondjuk urllib helyett requests modult használnék:import json
import base64
import requests
credentials = b'kodi:kodi'
encoded_credentials = base64.b64encode(credentials)
authorization = b'Basic ' + encoded_credentials
headers = { 'Content-Type': 'application/json', 'Authorization': authorization }
url = 'http://192.168.1.10:8080/jsonrpc?Base'
data = [
{"jsonrpc":"2.0","method":"Player.GetProperties","params":[1,["time"]],"id":17},
{"jsonrpc":"2.0","method":"Player.GetItem","params":[1,["file"]],"id":18}]
response = requests.post(url, headers=headers, data=json.dumps(data))
# vagy
# response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result) -
JoinR
őstag
válasz
Hege1234
#3102
üzenetére
data = data = {...}helyettdata = {...}elég. Egyprint(url)vagyprint(data)sorral ki tudnád írni a tartalmat, hogy tuti jó-e amit beküldesz.
Nem ismerem a Kodit, úgyhogy lehet hülye kérdés, de ha ezt a kódot a gépedről futtatod, akkor minek oda másolgatni bármilyen modult? A kodi csak egy http post request-et fog látni, mindegy, az már az ő dolga, hogyan dolgozza fel. -
válasz
Hege1234
#3103
üzenetére
Hogy néz ki a save.txt?
import requests
import os
from pynput.keyboard import Key, Controller as K
file = open("c:\kodi\save.txt")
lines = file.readlines()
line = lines[1]
os.startfile("c:\Program Files\Kodi2\kodi.exe")
time.sleep(2)
K().type(line+' ')
file = open("c:\kodi\save.txt")
lines2 = file.readlines()
url = lines2[0]
headers = { 'Content-Type': 'application/json' }
json = {"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file": url}}}
requests.post('http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base', headers= headers, data= str(json))És ez a rész minek kell?
K().type(line+' ')Amúgy a request-es rész csak akkor működik, ha engedélyezed a kodiban a http-n keresztüli távoli vezérlést.
-
Hege1234
addikt
válasz
Hege1234
#3102
üzenetére
upsz elfelejtettem entert nyomni

amit bemásoltam python-ba ez a folytatása
a kodi-ban nincs pynput ezért azt bemásoltam mappástól úgy már felismerte
ugyan ezt próbáltam a requests-el is ez lehet nem volt jó ötlet..
addig minden jól működik amíg az url string helyett elérési utat adok megTraceback (most recent call last):
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 597, in urlopen
httplib_response = self._make_request(conn, method, url,
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 1345, in getresponse
response.begin()
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 307, in begin
version, status, reason = self._read_status()
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 276, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\kodi\requests\adapters.py", line 439, in send
resp = conn.urlopen(
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 637, in urlopen
retries = retries.increment(method, url, error=e, _pool=self,
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\util\retry.py", line 368, in increment
raise six.reraise(type(error), error, _stacktrace)
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\packages\six.py", line 685, in reraise
raise value.with_traceback(tb)
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 597, in urlopen
httplib_response = self._make_request(conn, method, url,
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 1345, in getresponse
response.begin()
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 307, in begin
version, status, reason = self._read_status()
File "C:\Users\hadam\AppData\Local\Programs\Python\Python39\lib\http\client.py", line 276, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\kodi\requests\api.py", line 119, in post
return request('post', url, data=data, json=json, **kwargs)
File "c:\kodi\requests\api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "c:\kodi\requests\sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "c:\kodi\requests\sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "c:\kodi\requests\adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
Új hozzászólás Aktív témák
- ZOTAC GTX 670 AMP! Edition 2 GB GDDR5 256 bit PCI-E Videokártya
- Gigabyte GA-B75M-D3H LGA 1155 alaplap, + i5-3470S Processzor
- Asus GTX770-DirectCU II OC 2 GB GDDR5 256 bit PCI-E Videokártya
- FSP400-60APN 400W 85+ minősítésű tápegység
- Szép! HP EliteBook 840 G10 Hordozható Ultrabook Fémház 14" -50% i5-1335U 32/1TB Iris Xe FHD+
- HIBÁTLAN iPhone 13 128GB Green-1 ÉV GARANCIA - Kártyafüggetlen, MS4347
- Apple iPhone 12 128GB,Átlagos,Adatkabel,12 hónap garanciával
- Apple iPhone 16 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- HIBÁTLAN iPhone 14 Plus 128GB Yellow -1 ÉV GARANCIA - Kártyafüggetlen, MS4472
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

ebbol kitalalhatod a koromat (also korlatjat minimum).

