Új hozzászólás Aktív témák
-
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] -
Hege1234
addikt
Üdv,
ez tudom, hogy így nem lehetséges mert csak szám lehet benne,
i = [minoseg]
de nem jöttem rá a megoldásra
print('\nminőség kiválasztása: \n \n0 = 1080 \n1 = 720 \n2 = 540 \n3 = 480\n4 = 360')
my_list = [1080, 720, 540, 480, 360]
minoseg = input('\nírd ide a számot: ')
i = [minoseg]
quality = []
for index in i:
quality.append(my_list[index])
print(*quality, sep = '')ha esetleg ehhez egy totál más megoldás kellene
hogyan lehet azt megoldani, hogy ha az input részre beírom valamelyik számot
pl. 1 akkor kiadja a 720 -at?minőség kiválasztása:
0 = 1080
1 = 720
2 = 540
3 = 480
4 = 360
írd ide a számot: 1
720 -
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.
-
Hege1234
addikt
ezt, hogyan lehetne megoldani, hogy
ha error van, mert nincsen találat és így a fájlt se tudta létrehozni
attól még fusson le a többi és ne akassza meg a további folyamatokat?ha minden igaz elég lenne használni hozzá a try: és az except -et de eddig még nem sikerült
rájönnöm, hogy hova és hogy hogyan
esetleg van egy "univerzális" megoldás, ha error-t ír attól még folytassa tovább
és ne akadjon el?
értem én, hogy fontos, hogy látszódjon az error, de néha annyira feleslegesnek érzem, hogy emiatt megállítsa a teljes folyamatotsubprocess.run(['python', 'srt-forced.py'])srt-forced.py tartalma:
import re
import sys
http = open("manif2.mpd").read()
link = re.findall("<BaseURL>(https:\/\/.*)</BaseURL>", http)
link = link[0].strip()
id = re.findall("<BaseURL>(videos/.*)</BaseURL>", http)
id = id[0].strip()
vtt = re.findall("[a-zA-Z]+-HU\sForced.*[^?.].*[^?.].*[^?.].*<SegmentTemplate media=.(.*vtt)", http)
vtt = vtt[0].strip()
vtt = re.sub("(.{8}).vtt", "1.vtt", vtt)
print(link+id+vtt)
print(link+id+vtt, file=open("link-hu-forced.txt", "w"))output error:
Traceback (most recent call last):
File "i:\d-python\srt-forced.py", line 13, in <module>
vtt = vtt[0].strip()
IndexError: list index out of range
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\Python39\lib\tkinter\__init__.py", line 1885, in __call__
return self.func(*args)
File "i:\d-python\decrypt.py", line 223, in max
file = open("link-hu-forced.txt")
FileNotFoundError: [Errno 2] No such file or directory: 'link-hu-forced.txt' -
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]) -
Hege1234
addikt
válasz
cousin333
#3489
üzenetére
köszi, jónak tűnik a szöveges fájlban is, de valamiért itt is hozzáadódik az elejére és a végére a "
mp4decr = dirPath + '/programok/mp4decrypt.exe'
video = dirPath + '/Downloads/video.mp4'
audio = dirPath + '/Downloads/video.aac'
videoout = dirPath + '/Downloads/videoOUT.mp4'
audioout = dirPath + '/Downloads/audioOUT.aac'
with open("key.txt", "r") as fs:
keys = fs.readlines()
keys = keys[0].strip()
debug = subprocess.run([mp4decr, keys, video, videoout])
print(debug)
debug2 = subprocess.run([mp4decr, keys, audio, audioout])
print(debug2)
ERROR: unexpected argument (I:\d-python/Downloads/videoOUT.mp4)
CompletedProcess(args=['I:\\d-python/files/programok/mp4decrypt.exe', "'--key', '010023c4da1658b385f8a10dc7b17450:c4c1111bcde3c91357b50e6bb2a59ad3', '--key', '01051f72bf5ef290ccb970af41c57221:dad27bbe543d08bc0f545a355e3c4700', '--key', '010256b52c930f313823199d651d772e:b99212fc75e8e03b49bd9a0cf54190f1', '--key', '010100c9e8b349c1f159f05a9bedc74e:05326f0bdae9f59b6a24d69a59eae425'", 'I:\\d-python/Downloads/video.mp4', 'I:\\d-python/Downloads/videoOUT.mp4'], returncode=1)
ERROR: unexpected argument (I:\d-python/Downloads/audioOUT.aac)
CompletedProcess(args=['I:\\d-python/files/programok/mp4decrypt.exe', "'--key', '010023c4da1658b385f8a10dc7b17450:c4c1111bcde3c91357b50e6bb2a59ad3', '--key', '01051f72bf5ef290ccb970af41c57221:dad27bbe543d08bc0f545a355e3c4700', '--key', '010256b52c930f313823199d651d772e:b99212fc75e8e03b49bd9a0cf54190f1', '--key', '010100c9e8b349c1f159f05a9bedc74e:05326f0bdae9f59b6a24d69a59eae425'", 'I:\\d-python/Downloads/video.aac', 'I:\\d-python/Downloads/audioOUT.aac'], returncode=1)ilyen a formátuma amikor működik
CompletedProcess(args=['I:\\d-python/files/programok/mp4decrypt.exe', '--key', '6761374a7eb04b59a595a943f4dbcdbe:ed38695f26825877db9b0335f2212bb9', 'I:\\d-python/Downloads/video.mp4', 'I:\\d-python/Downloads/videoOUT.mp4'], returncode=0)
CompletedProcess(args=['I:\\d-python/files/programok/mp4decrypt.exe', '--key', '6761374a7eb04b59a595a943f4dbcdbe:ed38695f26825877db9b0335f2212bb9', 'I:\\d-python/Downloads/video.aac', 'I:\\d-python/Downloads/audioOUT.aac'], returncode=0)szerk:
teszteltem amit itt írtál #3490
így is hozzáadódik -
cousin333
addikt
válasz
cousin333
#3489
üzenetére
Hááát, még nem tökéletes...
Ez viszont már jobbnak tűnik:
def convert(txt):return ', '.join(f"'{chunk}'" for chunk in txt.split())with open('d:/input.txt', 'r') as reader, open('d:/output.txt', 'w') as writer:for line in map(convert, reader.readlines()):writer.write(line + "\n")Tesztbemenet (input.txt):
--this is something
new line here 1234Kimenet (output.txt):
'--this', 'is', 'something'
'new', 'line', 'here', '1234' -
-
Hege1234
addikt
Üdv,
ha szerepelnek ezek egy txt fájlban
--abc 025df 1234 abcdef
hogyan tudnám átalakítani hogy minden "szó" meglegyen toldva ezzel
'','--abc', '025df', '1234', 'abcdef',tesztként beleírtam egy txt fájlba kézzel és valamiért a subprocess már
hozzáadott az elejére és a végére is egy""'--abc', '025df', '1234', 'abcdef',"ez az aposztrófok miatt adódott hozzá?
hogyan lehetne elkerülni, hogy hozzáadja? -
cousin333
addikt
válasz
Archttila
#3483
üzenetére
Talán nem a legelegánsabb megoldás, de próbáld ezt:
#!/usr/bin/env pythonfrom lxml import htmlimport requestsimport jsonimport rere_fmt = r"-?[0-9]+"lat = "47.95"lng = "21.71"resp = requests.get("https://darksky.net/forecast/{},{}/ca12/en".format(lat, lng))tree = html.fromstring(resp.content)summary = tree.cssselect("span.summary.swap")temp = re.match(re_fmt, summary[0].text_content()).group()if temp is None:print("NA °C")else:print("{}°C".format(temp)) -
Archttila
veterán
válasz
cousin333
#3482
üzenetére
#!/usr/bin/env pythonfrom lxml import htmlimport requestsimport jsonlat = "47.95"lng = "21.71"resp = requests.get("https://darksky.net/forecast/{},{}/ca12/en".format(lat, lng))tree = html.fromstring(resp.content)summary = tree.cssselect("span.summary.swap")print(summary[0].text_content().split()[0],"°C")Koszonom sikerult!
Annyi gond van csak vele, hogy ronda mint az elso felesegemUgy kellene kineznie mint a bal oldali a CPU temp-nek csak ikon nelkul. Szerintem az a problema, hogy a script ugy hivja le a temp adatot, hogy odabiggyeszti az ertek moge a "C"-hez tartozo kis karikat. Ha nem tenne akkor kozvetlen a szam moge kerulne a print-ben megadott
°C -
cousin333
addikt
válasz
Archttila
#3481
üzenetére
A jobb oldali kódban töröld ki a 14, 15, 20, 21 sorokat
A 19-es sorba az idézőjelek közé írj "C"-t és a végére egy ")" jeletEz viszont még ki fogja írni az összegzést is (pl. "partly cloudy"). Hogy ne tegye, elvileg ezzel kéne kiegészítened(!) a 18-as sort (nyilván a vessző továbbra is a sor végén maradjon):
.split()[0] -
Archttila
veterán
Sziasztok
Nem ertek a programozashoz, ezert kerlek segitsetek megoldani az alabbi problemat.
Adott a felso waybar amire kitettem egy weather modult. Viszont en azt szeretnem, hogy ne mutassa a min. max. temp-et, csak az aktualisat egy nagy C -vel a vegen.
A keredesem tehat az, hogy kellene atirnom ehhez a kodsor aljan talalhato print funkciot? (bizony ennyire alapszinten vagyok)
Elore is koszi, es bocs a lama kerdesert

A kep tobbi resze most nem fontos (config es style.css)
-
kovisoft
őstag
válasz
Luxoros
#3478
üzenetére
Én a teljes (másképpen hibapont nélküli) kombinációk generálásáról írtam. Ha hibapontos totókulcsot akarsz generálni, az lényegesen nehezebb feladat (én speciel nem is ismerek rá módszert, de nem mélyedtem el a témában - tudna ilyet is a NumPy?). Ha viszont más által már korábban generált totókulcsot szeretnél alkalmazni a saját tippjeidre, az egy egyszerű behelyettesítés.
-
kovisoft
őstag
válasz
Luxoros
#3475
üzenetére
Ezzel a megközelítéssel nehéz lesz általánosan megoldani N db kétesély kombinációinak előállítását (de még a 4 db-ét is). Ugyanis most pl. az első függvényben elölről kezdve lecserélsz sorban 1, 2, 3, 4 tippet, de mindig csak elölről kezdve. Valójában mondjuk amikor 2 tippet cseréltél le a kétesélyek közül, akkor azt nem csak úgy kell, hogy az első kettőt, hanem az 1-3, 1-4, 2-3, 2-4, 3-4 párokat is, ami összesen 4 alatt a 2. És mindezt végigcsinálni 1-4 db lecserélt értékre.
Könnyebb egy olyan úton elindulni, hogy mindegyik kétesélyt úgy tekinted, mint ha egy bit lenne egy bináris számban. 4 db kétesély esetén ez azt jelenti, hogy a 4 bites (0-15-ig terjedő) számok bitjeinek kell megfeleltetni, hogy melyik kétesélyből éppen melyiket teszed bele a kombinációba.
Hogyan kell generálni a következő kombinációt? Ha az első pozícióban a kétesélyből az első értéknél jársz, akkor most veszed a második értéket, és kiíratod a kombinációt. Ellenkező esetben veszed újra az első értéket, de egyúttal továbblépsz a következő kétesélyes pozícióra, és ott is végigcsinálod ugyanezt, egészen addig, amíg már nem kell továbblépned (vagy végére értél a tömbnek). Akkor van vége, amikor már nem tudsz továbblépni, mert már minden kétesélyes pozícióban a második értéket írattad ki. Ez a módszer kis módosítással háromesélyes tippekre is működik, sőt akár vegyesen két- és háromesélyesekre is, csak tudnod kell, hogy melyik pozícióban mik a szóba jöhető értékek.
-
Luxoros
lelkes újonc
-
cousin333
addikt
válasz
Luxoros
#3470
üzenetére
Célszerű kiíratni a az elemeket a két függvényhívás között. Akkor látni fogod, hogy az exchange1 függvény meghívása után a lista2 csupa '0'-ból áll. A második függvény is rendben lefut, de emiatt nyilván már semmit sem fog csinálni.
Igazából a tipp2[i] = "0" sorra semmi szükséged.
A staticmethod-os megoldásban felesleges az __init__ függvény.
-
lm83
őstag
Sziasztok,
Nagyon kezdő kérdésem lenne.
Hogy tudok egy bekért, input adatot össze hasonlítani egy váltózó/lista nevével?
Hogy egyik listából a másikba át tudjak rakni egy adatot, vagy az összeset, szóval lényegtelen mit
Szóval legegyszerűbben van három változóm/listám, A, B, C.
Bekérem, hogy melyik kettőt adjam össze.
Beírom, hogy AB, akkor azt a kettőt adom össze és írom ki az eredményét. -
Luxoros
lelkes újonc
Tisztelt Pythonosok!
Egy általam írt osztály metódusainak a hívását szeretném elérni.
Bosszantó, hogy a PyCharm semmilyen hibát nem jelez. Tehát az első metódus lefut a második nem, miért? Miért nem fut le mind a két metódus?
A két "próba" osztály kódja itt érhető el:
https://drive.google.com/file/d/1axfXct8m5cnhvXkEA9PMILgfpxDXgoyJ/view?usp=sharing
https://drive.google.com/file/d/1wLBeM3CmH-UsWpnuos0yp1AtjHH-yyBP/view?usp=sharing -
Siriusb
veterán
válasz
Oryctolagus
#3463
üzenetére
Szerintem a root_dir megkevert téged, itt a példa: https://docs.python.org/3/library/shutil.html#archiving-example-with-base-dir
base_name is the name of the file to create, including the path
Azaz nem csak a készülő fájl neve, hanem az útvonal is itt kerül megadásra, pl. os.join-nal.base_dir is the directory where we start archiving from; i.e. base_dir will be the common prefix of all files and directories in the archive. base_dir must be given relative to root_dir
A root_dir az archivum főkönyvtára, és a base_dir relatív kell legyen ehhez.Tehát root_dir a C:, base_dir az "innen".
Vagy egyszerűen chdir-rel belépsz a "C:\innen"-be és a fenti két paraméternek ez lesz az alapértéke, meg sem kell adnod. Attól függ, milyen struktúrát akarsz. -
Oryctolagus
tag
Hello!
Valaki felvilagositana pls.shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
Van egy mappa amiben vannak mappak amikben midenfele fileok vannak.
Ezeket a mappakat a fileokkal egyutt szeretnem betomoritve atmasolni ugyanabba fokonyvtarba de egymasik mappaba.
A problema az hogy a zippel allomanyok elkeszulnek de nem masolodnak, illetve nem oda keszulnek el ahova en szeretnem.
Ugyanabban a mappaban maradnak ahol az archivalando mappak vannak.shutil.make-archive(ide az archivalando mappa neve jon ami egy for ciklubol jon, zip , C:\ide , C:\innen) -
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? -
Hege1234
addikt
Üdv,
tud esetleg valaki egy olyan trükköt amivel lecserélhető az end=" "
print('--key '+key, file=open("key.txt", "a+"), end=" ")
csak a gond van vele... de semmi infót nem találok róla hogyan lehetne
másképp megoldani azt, hogy egymás után tegye a kiadott értéket és ne egymás alápl. end=" " nélkül így nézne ki a fájlban
--key 010084
--key 01053b(az, hogy hány darab "key" fog generálódni az random, lehet csak egy, de
lehet akár 2 vagy 5-6 is)
print-el valahogy össze lehet hozni így, hogy egymás után legyen téve?--key 010084 --key 01053b
-
tvamos
nagyúr
Sziasztok!
Kisse bukdacsolok a pycharmmal. Mert amugy nagyon jo lenne, eleg kezes az IDE, es en utalom parancssorbol futtatni a dolgokat.
Szoval az tortent, hogy Windowsz 10-es laptopon a pycharmmal csinaltam projektet, sikerult is, es valahogy beleirta a venv-be, hogy 3.11-el szeeretne futtatni a programomat. De itthon meg az asztali gepemen Linux van, (Linux Mint 20.3, amin persze Python3.8.10 van,) es amikor lehuzom a projektet a githubrol, akkor persze nem fut le. Nomost probaltam atallitani az interpretert, (ez alapjan,) akkor nagyon fura dolgok tortennek. Amikor bemegyek a configba, hogy kikeresem az interpretert, (/usr/bin/) akkor kiirja, hogy python3.9, de amikor a gepen keresem az interpretert, akkor ott python3.8 van, meg python3. Nomost termeszetesen sem a python3.9, vagy a python3.9-config, vagy a python3, vagy akar a python3-config filok kivalasztasaval nem lesz jo. Ami gynus, hogy onnan interpreter ugyan van, de a gepen amugy ott levo tkinter, vagy serial modulokat nem talalja. (Vagy ezt library-nek kell hivni? Nem tudom mar.)
Termeszetesen parancssorbol siman lefut a programom.
Nincs valami otletetek, mit csinalok rosszul? Mar ezt a python3.9-et sem ertem... teljesen osszezavart. Meg amugy mi ez a python3-config? Ilyet en nem latok ott. (/usr/bin/)
Elore is koszi! -
Hege1234
addikt
válasz
cousin333
#3454
üzenetére
köszönöm, tökéletesen működik!

import re
import json
regex = r'S([1-9]*[0-9])\s?E([1-9]*[0-9]):?'
def replacer(x):
a, b = x.groups()
return 'S' + a.rjust(2, '0') + 'E' + b.rjust(2, '0')
f = open('info.json', 'r')
title = json.load(f)
title = title[0]['body']['metadata']['hadron-legacy-telemetry']['seriesName']+' - '+title[1]['body']['details']['title']
done = re.sub(regex, replacer, title)
print(done)Supernatural - S15E09 The Trap
-
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'
-
Hege1234
addikt
Üdv,
sorozat számozását (S5 E2) szeretném átírni úgy, hogy 0-9 ig mindig tartalmazzon egy 0-át
és, hogy ne legyen köztük szünetRick and Morty - S5 E2 Mortyplicity
Rick and Morty - S05E02 Mortyplicity
ezt valahogy a kiprintelt szövegből kellene re.sub-al kivitelezni?import json
f = open('info.json', 'r')
title = json.load(f)
title = title[0]['body']['metadata']['hadron-legacy-telemetry']['seriesName']+' - '+title[1]['body']['details']['title'].replace(":", "")
print(title)ebben a részben van benne
title[1]['body']['details']['title'].replace(":", "")
a replace : azért kellett mert tettek oda egy kettőspontot is...
S5 E2: Mortyplicity
S05E02 Mortyplicityköszi, előre is!
-
-
Siriusb
veterán
Első kérdés, egyáltalán hol találod meg azt az email-t? Letöltöd egy levelező klienssel? Ebben az esetben pl. ott a mailbox modul. Ha gmail-es email címre jön, akár használhatod a gmail api-t is a szerverről lekérdezéshez.
A levél felépítésétől függően a re modul segítségével regex kifejezésekkel összeszedheted a szükséges információt, ám ha a továbbiakban feldolgoznád még, lehet egy sqlite adatbázis jobb lenne, mint a csv.
Vagy írsz egy wordpress modult, ami már eleve strukturált formában kiírja az adatokat a tárhelyre és csak simán behúzod onnan. -
rosejbli
senior tag
Sziasztok!
Útmutatást szeretnék kérni, mivel nem igazán tudom, hogy a problémámmal merrefelé induljak el.
Adott egy wordpress oldal, ahol ha egy partner kitölt egy formot (pl partner neve, email címe, telefonszáma), akkor arról én a formon megadott adatokkal kapok egy emailt, és én ebből az emailből szeretném kinyerni az adatokat majd mondjuk egy csv fájlba eltárolnám.
Tudtok ebben segíteni, hogy merre induljak?
Előre is köszi a segítséget! -
Siriusb
veterán
Mivel a google megszünteti a kevésbé biztonságos hozzáférést, próbálom összehozni a levélküldést gmail api-val. Többé-kevésbé működik, azonban elakadtam ott, hogy a Feladónál hogy tudok megjeleníteni egy tetszőleges nevet, nem pusztán az email címet?
Ezidáig működött afrom email.headerregistry import Addresssender = Address(display_name='Ez az ami tetszőleges', addr_spec='Troppauer.Hümér@gmail.com')
Amennyiben valakinek van ezzel tapasztalata, megköszönöm, ha kisegít. -
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
Sziasztok!
text fájlból szeretném a fontosabb részt egy .txt fájlba kimenteni regex-el
eddig ezt a jrepl.bat-al oldottam meg de szeretném ugyanezt megoldani pythonnala logban lehet akár 17-20000 sor is (1-2 MB a fájl mérete)
amiből csak 1 sor egy részét kellene valahogy elmenteni egy külső .txt fájlbaa jrepl-t batch alól hívtam be
call "jrepl.bat" "\bhttps?:.+\.mpd(?!\?)\b" "" /MATCH /F "log.txt_log" /O "link.txt"pythonhoz ezt a regex-et, hogyan tudnám felhasználni?
\bhttps?:.+\.mpd(?!\?)\ba jrepl "javascript" alapú szóval nem vagyok teljesen biztos benne, hogy átalakítás
nélkül lehet-e használni ezt a regex-et python-hoz is
kelleni fog hozzá letölteni egy modult vagy az alap python is képes rá?
Python 3.9.0regex101 példa
köszi, előre is!
-
Siriusb
veterán
válasz
Alcsi69
#3435
üzenetére
Nem tudom miért a python-t gondolod legegyszerűbbnek, az elmondottak alapján ha nem ragaszkodsz a python-hoz, szerintem inkább csináld meg excel-ben, gyorsabban elkészülsz és a helyedre kerülő ember – amennyiben nincs programozói tapasztalata –, jobban fog boldogulni az excel fájllal.
-
-
Alcsi69
senior tag
Sziasztok!
Gyakornoki munkam soran (ami valoszinuleg nem lesz tul hosszu eletu amugy) belebotlottam nehany szamomra nehezebbnek tuno feladatba, es szerintem a legegyszerubben pythonnal lehetne megvalositani oket openpyxl segitsegevel.
Sajnos en pythonban nem annyira vagyok jartas, inkabb csak java-val es c/c++-szal foglalkoztam.A legegyszerubb feladat elso resze valahogy igy nezne ki:
Van 12db .xlsx-em melyekben kulonbozo gepek havi fogyasztasai vannak (12db xlsx->mindegyik 1-1 honapra vonatkozoan). Ezen gepeket 2021 valamelyik honapjaban fejlesztettek, es 30%-os fogyasztascsokkenest igeretek.
Van egy 13. darab xlsx, melyben a vizsgalni kivant gepek vannak, illetve a fejlesztes datuma van megadva.
Eloszor is tudnia kellene a programnak, hogyha az adott gepen pl. a 10. honapban tortent a fejlesztes, akkor a 9. es 11. honap fogyasztasi adataibol kellene a szazalekos csokkenest (jobb esetben) logolnia. Tehat tudnia kell hogy melyik fajlban kell keresnie adott ID alapjan a havi fogyasztast tartalmazo xlsxekben a megfelelo ID-hoz tartozo fogyasztasi adatokat.
Szerintetek ez a feladat a fent emlitett openpyxl segitsegevel megoldhato?

-
cousin333
addikt
Az, hogy az egér világít, még nem sokat jelent. A Windows eszközkezelőben látod is az egeret?
Gondolom ezt a kódot futtattad:
import spacenavigatorimport timesuccess = spacenavigator.open()if success:while 1:state = spacenavigator.read()print(state.x, state.y, state.z)time.sleep(0.5)Mi erre a kimenet pontosan?
Én lépésenként megnézném, mit csinál a kód. Akár debuggerrel, akár kézzel beírva. Például innen:
import pywinusb.hid as hidall_hids = hid.find_all_hid_devices()if all_hids:for index, dev in enumerate(all_hids):print(f'{index=}, {dev=}') -
Bazs87
tag
Sziasztok!
sziasztok!
szeretnék 3D egerér pozíciót pythonból lekérdezni.
Installáltam a pywinusbt és a spacenavigator libet is, próbáltam 3dconnexion driverrel és anélkül is, a hardwerem egy SpaceMouse Compact, usb csatlakoztatva, egér világít.
A főoldalon lévő demóprogram viszont és hibaüzenet nélkül végigmegy, de nem talál semmilyen eszközt.
Valaki dolgozott már ezzel? Mit tudok ilyenkor csinálni?
minden hasonló tapasztalat, észrevétel érdekel
Előre is köszönöm
-
Siriusb
veterán
válasz
Oryctolagus
#3423
üzenetére
Szia!
Szerintem ezek számot adnak vissza: [link]
Ha datetime-má alakítod, tudsz a dátumokkal is műveleteket végezni, kivonni stb:
valtozo = datetime.datetime.fromtimestamp(os.path.getmtime(path)) -
válasz
Oryctolagus
#3423
üzenetére
Szia,
át kell alakítani datetimre-ra és utána már kivonhatóik egymásból simán
time = datetime.strptime(time_str, '%d/%m/%y %H:%M:%S')
-
Oryctolagus
tag
Sziasztok!
Szeretnem megtudni egy mappa utolso modositasanak datumat.
Es a jelenlegi datum kozott eltelt idot.
os.path.getctime(path)
os.path.getmtime(path)Ezekkel meg is lenne, de hogzan tudnam kivonni egyiket a masikbol?
String erteket ad vissza mindaketto.
example output: Fri Jan 21 22:10:54 2022 -
Rulez81
tag
Sziasztok,
Készítettem egy programot a napokban. Sose láttam ezelőtt Pythont. Szóval abszolut kezdő vagyok benne.
Egy kérdésem lenne, fordításkor adtam hozzá icont, viszont nem a hozzáadott icon látszik a windows tálcán, amikor fut. Ha rögzítem tálcán, akkor igen. Lehet ezt orvosolni?
köszi! -
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?
-
Hege1234
addikt
Üdv,
egy olyan kérdésem lenne, hogy hogyan lehetne egy .txt (dat.txt, csak egy sor van benne) tartalmát a headersben lévő dat helyére "illeszteni"
headers = {
'Connection': 'keep-alive',
'sec-ch-ua': '"Chromium";v="94", " Not A;Brand";v="99", "Opera";v="80"',
'data': dat,
'sec-ch-ua-mobile': '?0',
} -
kovisoft
őstag
Ez egy Dialog, nem egy Edit control. Vagy az van, hogy ez tényleg már maga a terminál ablak, és akkor ebből nem fogsz tudni szöveget kiolvasni. Vagy pedig mégsem sikerült eltalálni. Esetleg egymáson van több control is és csak a legelsőt kaptad vissza, de igazából annak valamilyen childja lenne a keresett control. Sorry, ehhez én már kevés vagyok, eddig is jobbára csak tippelgettem.
-
SzVFE1
csendes tag
válasz
kovisoft
#3410
üzenetére
Akkor szerinted ez a terminál vezérlés Python alatt semmilyen módszerrel nem kivitelezhető? Mindenesetre megcsináltam, amit javasoltál, a következő kóddal a következőt dobta ki. Nem tudom, hogy az 1000:1000 koordinátákkal eltaláltam-e a felületet, de nagyméretben az teszi ki a képernyő döntő részét.
from pywinauto.application import Application
app = Application(backend='uia').start('"C:\\Program Files (x86)\\Mobatek\\MobaXterm\\MobaXterm.exe"').connect(title='val',timeout=100)
textEditor = app.val.child_window(control_type="Tab").wrapper_object()
getline = app.val.child_window(auto_id="67104", control_type="Edit").wrapper_object()
top_wnd = app.top_window().wrapper_object()
print (control)
Eredmény:uiawrapper.UIAWrapper - '', DialogProcess finished with exit code 0Ezzel tudunk valamit kezdeni?
-
kovisoft
őstag
Nem biztos, hogy az alábbi kód működik, de valami ilyesmire gondoltam, hogy ha mondjuk fixen mindig ugyanott nyílik meg az applikáció és van egy x, y koordinátád, ami a terminál ablakba esik, akkor lekéred, hogy melyik control van ezen a pozíción, aztán kiíratod ennek valamilyen azonosítóját:
top_wnd = app.top_window().wrapper_object()
control = top_wnd.from_point(x, y)Én továbbra is kételkedem benne, hogy ez egy sima edit control lenne és hogy ki tudnád innen olvasni a megjelenített szöveget. De ne legyen igazam.
-
SzVFE1
csendes tag
válasz
kovisoft
#3407
üzenetére
Igen, ahogy mondod a type_keys van használva. Bevágom akkor alább a teljes fastruktúrát, hogy látni lehessen, hogy mennyire kevés a választék. Az alábbi kóddal simán megy a beleírás és a tab váltás is. A tab control alatti pane contol-okkal szintén. Nem ragaszkodom a pywinauto-hoz, bármilyen módszer tökéletes lenne, amivel parancsokat tudnék küldeni a MobaXterm adott tab-jába és szöveget tudnék kiolvasni belőle.
from pywinauto.application import Applicationapp = Application(backend='uia').start('"C:\\Program Files (x86)\\Mobatek\\MobaXterm\\MobaXterm.exe"').connect(title='val',timeout=100)textEditor = app.val.child_window(control_type="Tab").wrapper_object()textEditor.type_keys("^{TAB 2}")textEditor.type_keys("test",with_spaces = True)Control Identifiers:Dialog - 'val' (L-11, T-11, R3851, B2111)['Dialog', 'val', 'valDialog', 'val0', 'val1', 'Dialog0', 'Dialog1']child_window(title="val", control_type="Window")|| Pane - '' (L0, T131, R3840, B173)| ['Pane', 'Pane0', 'Pane1']| child_window(auto_id="67100", control_type="Pane")| || | Pane - '' (L0, T131, R360, B173)| | ['Pane2']| | child_window(auto_id="67102", control_type="Pane")| | || | | Edit - '' (L6, T143, R354, B167)| | | ['Edit']| | | child_window(auto_id="67104", control_type="Edit")| || | Pane - '' (L364, T131, R3778, B173)| | ['Pane3']| | child_window(auto_id="67108", control_type="Pane")|| Pane - '' (L0, T2070, R3840, B2100)| ['Pane4']| child_window(auto_id="67098", control_type="Pane")|| Pane - '' (L0, T64, R3840, B131)| ['Pane5']| child_window(auto_id="67096", control_type="Pane")|| Pane - '' (L0, T173, R360, B2070)| ['Pane6']| child_window(auto_id="66876", control_type="Pane")| || | Pane - '' (L0, T173, R360, B2070)| | ['Pane7']| | child_window(auto_id="66878", control_type="Pane")| | || | | TabControl - '' (L0, T173, R360, B2070)| | | ['TabControl']| | | child_window(auto_id="132416", control_type="Tab")| | | || | | | Pane - '' (L52, T177, R356, B2066)| | | | ['Pane8']| | | | child_window(auto_id="66884", control_type="Pane")| | | | || | | | | Pane - '' (L52, T177, R356, B2066)| | | | | ['Pane9']| | | | | child_window(auto_id="66886", control_type="Pane")| | | | | || | | | | | TreeView - '' (L52, T177, R356, B2066)| | | | | | ['TreeView']| | | | | | child_window(auto_id="132424", control_type="Tree")| | | | | | || | | | | | | TreeItem - 'User sessions' (L96, T177, R195, B211)| | | | | | | ['User sessionsTreeItem', 'TreeItem', 'User sessions', 'TreeItem0', 'TreeItem1']| | | | | | | child_window(title="User sessions", control_type="TreeItem")| | | | | | || | | | | | | TreeItem - 'val' (L122, T211, R146, B245)| | | | | | | ['val2', 'valTreeItem', 'TreeItem2']| | | | | | | child_window(title="val", control_type="TreeItem")| | | || | | | TabItem - '' (L2, T175, R50, B229)| | | | ['TabItem', 'TabItem0', 'TabItem1']| | | || | | | TabItem - '' (L2, T229, R50, B283)| | | | ['TabItem2']| | | || | | | TabItem - '' (L2, T283, R50, B337)| | | | ['TabItem3']|| Pane - '' (L366, T173, R3840, B2070)| ['Pane10']| child_window(auto_id="67090", control_type="Pane")| || | ListBox - '' (L306, T113, R307, B114)| | ['ListBox']| | child_window(auto_id="67094", control_type="List")| || | Pane - '' (L366, T173, R3840, B2070)| | ['Pane11']| | child_window(auto_id="67092", control_type="Pane")| | || | | Dialog - '' (L366, T173, R3840, B2070)| | | ['Dialog2']| | | || | | | ScrollBar - 'Függőleges' (L3814, T173, R3840, B2070)| | | | ['Függőleges', 'ScrollBar', 'FüggőlegesScrollBar']| | | | child_window(title="Függőleges", auto_id="NonClientVerticalScrollBar", control_type="ScrollBar")| | | | || | | | | Button - 'Egy sorral fel' (L3814, T173, R3840, B199)| | | | | ['Egy sorral felButton', 'Button', 'Egy sorral fel', 'Button0', 'Button1']| | | | | child_window(title="Egy sorral fel", auto_id="UpButton", control_type="Button")| | | | || | | | | Button - 'Egy sorral le' (L3814, T2044, R3840, B2070)| | | | | ['Button2', 'Egy sorral leButton', 'Egy sorral le']| | | | | child_window(title="Egy sorral le", auto_id="DownButton", control_type="Button")|| TitleBar - '' (L24, T-8, R3840, B34)| ['TitleBar']| || | Menu - 'Rendszer' (L0, T0, R22, B22)| | ['Rendszer', 'Menu', 'RendszerMenu', 'Rendszer0', 'Rendszer1', 'Menu0', 'Menu1']| | child_window(title="Rendszer", auto_id="MenuBar", control_type="MenuBar")| | || | | MenuItem - 'Rendszer' (L0, T0, R22, B22)| | | ['RendszerMenuItem', 'MenuItem', 'Rendszer2', 'MenuItem0', 'MenuItem1']| | | child_window(title="Rendszer", control_type="MenuItem")| || | Button - 'Kis méret' (L3627, T11, R3698, B33)| | ['Button3', 'Kis méret', 'Kis méretButton']| | child_window(title="Kis méret", control_type="Button")| || | Button - 'Előző méret' (L3698, T11, R3768, B33)| | ['Előző méretButton', 'Button4', 'Előző méret']| | child_window(title="Előző méret", control_type="Button")| || | Button - 'Bezárás' (L3768, T11, R3851, B33)| | ['BezárásButton', 'Button5', 'Bezárás']| | child_window(title="Bezárás", control_type="Button")|| Menu - 'Alkalmazás' (L0, T23, R2560, B42)| ['AlkalmazásMenu', 'Alkalmazás', 'Menu2']| child_window(title="Alkalmazás", auto_id="MenuBar", control_type="MenuBar")| || | MenuItem - '' (L0, T23, R57, B42)| | ['MenuItem2']| || | MenuItem - '' (L57, T23, R116, B42)| | ['MenuItem3']| || | MenuItem - '' (L115, T23, R153, B42)| | ['MenuItem4']| || | MenuItem - '' (L153, T23, R208, B42)| | ['MenuItem5']| || | MenuItem - '' (L209, T23, R250, B42)| | ['MenuItem6']| || | MenuItem - '' (L249, T23, R298, B42)| | ['MenuItem7']| || | MenuItem - '' (L299, T23, R355, B42)| | ['MenuItem8']| || | MenuItem - '' (L355, T23, R407, B42)| | ['MenuItem9']| || | MenuItem - '' (L407, T23, R445, B42)| | ['MenuItem10'] -
kovisoft
őstag
A from_point-tal kapcsolatban csak arra gondoltam, hogy a saját gépeden próbaképpen meg tudnád nézni, hogy x, y koordináta alapján melyik window-t adja vissza és az milyen típusú. És talán ez alapján már tudnál írni egy univerzális lekérdezést (az nyilván már nem x, y koordináta alapján menne, hanem típus vagy egyéb azonosító alapján).
Amúgy én némileg kételkedem abban, hogy a terminál ablak egy szimpla edit control lenne. Legalábbis ha szimulálnia kell tudni mindenféle terminál fícsört, mint pl. színezés, akkor ez lehet, hogy inkább valami speciális ablak lesz, aminek valami saját renderelése van, és akkor abból nem fogsz tudni kiolvasni szöveget. A beírás sem úgy megy, gondolom, hogy beleírsz egy edit controlba valami szöveget, hanem inkább a lenyomott billentyűket adod át, nem?
-
SzVFE1
csendes tag
válasz
kovisoft
#3404
üzenetére
Szöveget beleírni a Tab vagy Pane control kiválasztásával sikeresen tudok, csak a kiolvasás nem akar nekem menni. Edit control-ból 2 szokott lenni, az egyik ráadásul el is szokott tűnni a fa struktúrából valami miatt. Lefut a get_line rájuk hibaüzenet nélkül ha a 0-ás sort adom meg, de nem olvas ki semmit. A from_point-ot hogyan kéne esetemben használni? Nem veszélyes abból a szempontból, hogy a kódnak más gépeken, más felbontással is működnie kell? Arra gondolok, ha mondjuk pl. a felhasználó kisméretűben használja az ablakot a képernyő egy random részén, akkor máshova esnek a koordináták.
-
Luxoros
lelkes újonc
válasz
Phobion
#3394
üzenetére
Köszi, hogy megnézed. A "Háromszög rajzoló" -ra kattints!
https://tkintermagyarul.blogspot.com/ -
kovisoft
őstag
Lehet, hogy nem azt az edit controlt találtad meg, amiben a szöveg van (egyáltalán edit controlban van?). Valami alapján be kellene azonosítanod, hogy melyik child window-t keresed. Ha nem megy auto_id, class, window title, hierarchia, stb alapján, akkor esetleg megpróbálkozhatsz koordináta alapján: .from_point(x, y). De csak tippelek, mert nincs tapasztalatom a pywinauto-val.
-
SzVFE1
csendes tag
Most ki is próbáltam ebben a formában, de ezt is eldobja hibával. Egyébként bármilyen tanácsot szívesen fogadok, a pywinauto-hoz sem ragaszkodom, ha létezik jobb a MobaXterm kontrollálására.
from pywinauto.application import Application
app = Application(backend='uia').start('"C:\\Program Files (x86)\\Mobatek\\MobaXterm\\MobaXterm.exe"').connect(title='val',timeout=100)
app.val.print_control_identifiers()
textEditor = app.val.child_window(control_type="Tab").wrapper_object()
getline = app.val.child_window(auto_id="66952", control_type="Edit").wrapper_object()
print(getline.Edit.get_line(0))print(getline.Edit.get_line(0))
AttributeError: 'EditWrapper' object has no attribute 'Edit'
Új hozzászólás Aktív témák
- Inno3D GeForce RTX 4070 Ti X3 12G - Karácsonyi akcióban!
- Redragon Kumara K552 RGB Brown Switch magyar billentyűzet
- Lenovo Thinkpad P1 Gen 6 - i9-13980HX, 32GB, 2TB SSD, 16" WQUXGA (3840 2400), RTX 4090
- 15.gen! Intel Core Ultra 9 285K +16-32GB DDR5 RAM +hűtött VRM-es Z890 lap! GAR/SZÁMLA (a Te nevedre)
- OP AudioCodes C450HD Ip Phones - Szines kijelzős - Teams/ Zoom telefon - Új dobozos
- 0% THM 4 havi részlet beszámítás! RX 9060 XT / 9070 / 9070 XT videokártyák készletről KAMATMENTESEN
- LG 27GR95QE - 27" OLED / QHD 2K / 240Hz & 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- darkFlash GR12 Darkstorm Blue/Green
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Azonnali készpénzes nVidia RTX 4000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi








