- Honor 400 - és mégis mozog a kép
- Google Pixel topik
- iPhone 16e - ellenvetésem lenne
- Azonnali navigációs kérdések órája
- Poco X6 Pro - ötös alá
- Csak semmi szimmetria: flegma dizájnnal készül a Nothing Phone (3)
- Garmin Forerunner 970 - fogd a pénzt, és fuss!
- Honor Magic5 Pro - kamerák bűvöletében
- Honor Magic6 Pro - kör közepén számok
- OnePlus One - Kína már itt One
Ú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
-
sh4d0w
félisten
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 csinaltamebbol 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 '+key
with 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.close
hogyan 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 re
regex = 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'
-
sztanozs
veterán
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==.mpd
erre:
https://stream7.nava.hu/navahu_bdrm/_definst_/amlst:mnfa-84/manifest_w999999999_ps0000100_pd60000000_qc2Vzc2lkPSZvbXE9dHJ1ZSZucD0mbGI9WDlYaVNvY3Q4dGpaJTJCRkt5UllXbWNxS1c3cWRZcDNnYmdOTUJVaks5MTduaUN4M1k5Sm1Vc2FPV0RyblFmV2pQbWdhM0FJVXFuYkdUJTBEJTBBNDZTUGRyZTAzUSUzRCUzRCUwRCUwQQ==.mpd
ezzel 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?
-
sztanozs
veterán
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 -
sztanozs
veterán
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):
-
sztanozs
veterán
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")) -
sztanozs
veterán
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 datetime
t = 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'])
-
sztanozs
veterán
-
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.
-
sztanozs
veterán
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
time
key és melyikbenitem
key.
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)
-
sztanozs
veterán
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) -
sztanozs
veterán
válasz
Hege1234 #3103 üzenetére
Kodi RPC engedélyezése:
https://www.tinymediamanager.org/blog/kodi-json-rpc-api/ -
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. -
sztanozs
veterán
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
Hirdetés
- GAMER PC : RYZEN 5 4500 / 16GB DDR4 / ASUS RX 480 8GB / WiFi / Bluetooth / 512GB M.2 SSD / 500GB HDD
- Dell Latitude 7390, 13,3" FHD IPS , I5-7300U CPU, 16GB DDR4, 512GB SSD, WIN 11, ( olvasd végig )
- Acer PREDATOR HELIOS NEO 16 / i9-14900HX / RTX 4070 (140W) / 1 TB SSD / 240HZ
- Topping A70 Pro fejhallgató erősítő
- Topping D70 Pro Octo DAC
- DELL PowerEdge R730xd 26SFF rack szerver - 2xE5-2680v3 (24c/48t, 2.5/3.3GHz), 64GB RAM, 10G, H730p
- Xiaomi Redmi 10 128GB, Kártyafüggetlen, 1 Év Garanciával
- Olcsó laptop! Lenovo Ideapad R3 3250U / 8GB RAM / 128Gb SSD!
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- REFURBISHED és ÚJ - HP Thunderbolt Dock G2 230W docking station (3TR87AA)
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest