Új hozzászólás Aktív témák
-
Hege1234
addikt
JoinR, sztanozs
köszi az egyszerűbb megoldásokat!
szuper, hogy ennyire össze lehe kötni a dolgokat

-
válasz
Hege1234
#3596
üzenetére
pedig ez feldolgozható kellene legyen beautful souppal is, kb így:
durations = [[*d.strings][1][:8]for d in soup.find_all("span", {"class": "duration"})]#3597 - strptime is elegáns...
Igazából a milisechez se kell külön modul, csak összedogatni a részeket:
for duration in durations:
format = "%H:%M:%S"
x = time.strptime(duration, format)
delta_ms = (x.tm_hour * 3600 + x.tm_min * 60 + x.tm_sec) * 1000
# vagy
h, m, s = map(int, duration.split(':'))
delta_ms = (h* 3600 + m * 60 + s) * 1000 -
JoinR
őstag
válasz
Hege1234
#3592
üzenetére
import urllib.request
import re
from bs4 import BeautifulSoup
from datetime import timedelta
import time
link = 'https://nava.hu/wp-content/plugins/hms-nava/interface/classes/cacheManager.php?id=3964147&solrUrl=http%3A%2F%2F10.10.100.101%3A8983%2Fsolr%2Fnavapub%2Fselect&blogId=2&mode=titles&navaPointsUrl=%2F%2Fnav>
response = urllib.request.urlopen(link)
soup = BeautifulSoup(response.read(), from_encoding=response.headers.get_param('charset'), features="html.parser")
duration = soup.select_one("span[class=duration]").text
format = "Időtartam: %H:%M:%S| "
x = time.strptime(duration, format)
delta = timedelta(hours=x.tm_hour,minutes=x.tm_min,seconds=x.tm_sec).total_seconds()
delta_ms = int(delta)*1000
print(delta_ms) -
válasz
Hege1234
#3592
üzenetére
Én requests modullal szedném le, és nem file-ba, hanem egyből stringbe. Melóban sajna nem tudom kipróbálni a linket ami a kódban van.
BTW a time.txt meg duration.txt honnan jön? Nem úgy tűnik, hogy azt a kód töltené le... Write módban miért olvasol belőle?
Nem egészen értem, mit csinálna a kód. Vissza is szeretnél írni bele?Milyen formában jön le a html adat, példát tudsz mutatni?
-
Hege1234
addikt
sztanozs:
igen, gondoltam mert amikor programkód tag-be teszed a script-et az mindig egyből működni szokott
ha már így belementünk ezt lehetne egyszerűsíteni?
from datetime import timedelta
import urllib.request
import re
link = 'https://nava.hu/wp-content/plugins/hms-nava/interface/classes/cacheManager.php?id=3964147&solrUrl=http%3A%2F%2F10.10.100.101%3A8983%2Fsolr%2Fnavapub%2Fselect&blogId=2&mode=titles&navaPointsUrl=%2F%2Fnava.hu%2Fnava-pontok%2F&searchPageUrl=%2F%2Fnava.hu%2Ftalalati-lista%2F&videoUrl=https%3A%2F%2Fnava.hu%2Fid%2F3964147%2F&embedUrl=https%3A%2F%2Fnava.hu%2Fembed%2F3964147'
resp = urllib.request.urlopen(link)
data = resp.read()
text = data.decode('utf-8')
urllib.request.urlretrieve(link, "info.html")
info = open("info.html", "r", encoding="utf-8").read()
time = re.findall("Időtartam:.<.span>(.*)..<.span>", info)
print(time, file=open("time.txt", "w"))
durat = open("time.txt").read()
duration = re.findall(".'(.*)'.", durat)[0].strip()
print(duration, file=open("duration.txt", "w"))
file = open("duration.txt")
line = file.readlines()
duration=line[0].strip()
h, m, s = duration.split(':')
delta = timedelta(hours=int(h), minutes=int(m), seconds=int(s))
rms = int(delta.total_seconds()*1000)
print(rms)(próbáltam BeautifulSoup-al is, de elég nagy katyvasz a html része szóval azt a részét inkább hagytam..)
mivel sehogy nem tudtam integer-be alakítani addig eljutottam, hogy megkaptam ebbe a formába
['00:27:07']de tovább már nem
ezért inkább re.sub-al leszedtem róla...
persze így is működik ahogy most van, de nagyon túlbonyolítottam sztem... -
válasz
Hege1234
#3588
üzenetére
Sorry, csak fejből írtam

map(int,...)-tel lehet még egyszerűsíteni:from datetime import timedelta
lista = ['00:10:00', '00:40:00', '01:00:00']
for elem in lista:
h, m, s = map(int, elem.split(':'))
delta = timedelta(hours=h, minutes=m, seconds=s)
print(delta.total_seconds() * 1000) -
Hege1234
addikt
válasz
sztanozs
#3587
üzenetére
nálam ezt hozza fel hibának:
delta = timedelta(hour=h, minute=m, second=s)
TypeError: 'hour' is an invalid keyword argument for __new__()lehet a python 3.9 miatt?
from datetime import timedelta
h, m, s = '00:10:00'.split(':')
delta = timedelta(hours=int(h), minutes=int(m), seconds=int(s))
print(delta.total_seconds*1000)TypeError: unsupported operand type(s) for *: 'builtin_function_or_method' and 'int'amit adott TypeError-t átírva, ezt írja hibának persze ez már lehet inkább amiatt mert rosszul használom..
-
Hege1234
addikt
sziasztok!
ezt a formátumot 00:01:00 hogyan lehetne milliszekundumra konvertálni? 60000
00:10:00 (600000)
00:40:00 (2400000)
01:00:00 (3600000) -
-
Hege1234
addikt
köszi ezek így nagyon praktikusak
és már tudtam is máshova alkalmazni
átírtam minden tanácsot
aminek a révén rájöttem, hogy rosszul vezettem lemivel loopolva van, így úgy kell az
inputot értelmezni, hogy a számokat amik be vannak írva pl az 1 3 9
azokat így kellene elvileg megkapnianums = input('\nírd ide a számokat: ').split()
#1 3 9
végigmegy a list1-esen
nums = input('\nírd ide a számokat: ').split()
#3
végigmegy a list3-ason
nums = input('\nírd ide a számokat: ').split()
#9
végigmegy a list9-esen
nums = input('\nírd ide a számokat: ').split()
#és itt már újra várja a számot/számokat -
RedHarlow
aktív tag
Sziasztok, xml mentésnél hogy tudom megadni a path-ot, hogy hova mentse a fájlt?
xmlstr = ET.tostring(root, encoding='utf8', method='xml')tree.write(FileName,xml_declaration=True,encoding='UTF-8',method="xml") -
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... -
Hege1234
addikt
így gép előtt már látom mi a probléma
mivel egy dict-ből olvastatom ki az infót a megadott számok alapján
keyerror-t ad visszaKeyError: 'list1\n3'
amikor az van beleírva, hogy 1 3p:\split>read_l.py
1 - video 1#23
2 - video 2#23
3 - video 3#23
4 - video 4#23
írd ide a számot: 1 3
1
3
Traceback (most recent call last):
File "P:\split\read_l.py", line 18, in <module>
cim = title['list'+str(nums)]['cim']
KeyError: 'list1\n3'kiszedtem egy példát amin talán jobban átláthatóbb
title = {"list1":{"cim":"video 1#23"},"list2":{"cim":"video 2#23"},"list3":{"cim":"video 3#23"},"list4":{"cim":"video 4#23"}}
index = 1
for thevalue in title.values():
print(f"{index:5}"+' - '+thevalue['cim'])
index += 1
nums = input('\nírd ide a számokat: ').split()
nums = '\n'.join(nums)
print(nums)
cim = title['list'+str(nums)]['cim']
print('\n'+cim+'\n')ez van loop-ba téve, ha be van írva egy szám kiadja a címet
és bejön újra az inputszövegszerkesztőből nem tudom miért működhet..
megjelenítettem a rejtett karaktereket akkor ezt adja ki -
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... -
Hege1234
addikt
ki van printelve, hogy mit tud csinálni a számokkal
minden egyes szám mást csinálígy tudna a user lekérni egyszerre több mindent nem csak egy számnak a tartalmát
átnézi és egy sorba beírja mi kell neki
pl ezt írja az inputba
1 3 7 15gondolom akkor ezt kellene szeparálni, hogy a számok közötti szünet kapjon egy új sort '\n' ?
-
Hege1234
addikt
köszi, kipróbálom majd
valahogy úgy tudnám leírni, hogyan használnám, hogy eddig
szövegszerkesztőből másoltam ki az egymás alatt lévő számokat
ezeket kijelöltem és beillesztettem az inputba
így automata minden új sorba került
(ahogy végzett egy számmal beadta a következőt)
szóval azt szeretném elérni, hogy ne kelljen már a szövegszerkesztőbe egymás alá tenni a számokat -
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.
-
Hege1234
addikt
a split-et, hogyan lehet úgy használni, hogy az inputba lévő számok mindig egy új sorba kerüljenek?
1
4
9
..stbx = [int(x) for x in input("Enter multiple value: ").split(',')]
#1 4 9 132 322
print("Number of list is: ", x)
#1,4,9,132,322.split('\n')-el próbálkoztam, de ezt a hibát írja kiValueError: invalid literal for int() with base 10: '1 4 9 132 322'
-
válasz
bLaCkDoGoNe
#3569
üzenetére
Van egy Python listám, ami tartalmaz 8 random számot
Ez legyen inkább egy dict:lista = [17, 42, 3, 84, 999, 5, 72, 36]dict_lista = {v:0 for v in lista}df = pandas.read_csv('test.csv')for row in df.iterrows():for v in row[1].values:if v in dict_lista: dict_lista[v] += 1print(dict_lista) -
bLaCkDoGoNe
veterán
Sziasztok, az alábbit szeretném Pythonban megcsinálni:
Van egy CSV fájlom, benne egy rakás szám, mondjuk 4 "oszlopban". Ezeket beolvasom egy pandas dataframe-be.
Szam1 Szam2 Szam3 Szam40 9 8 7 61 4 3 2 12 5 1 9 4...Van egy Python listám, ami tartalmaz 8 random számot.
[17, 42, 3, 84, 999, 5, 72, 36]Szeretnék végigmenni soronként a dataframe-en, és megnézni, hogy a lista elemeiből megtalálható-e egy vagy több az adott sorban, majd a végén egy dictionary-t szeretnék kapni, amiben gyakorisággal szerepelnek a lista elemei, valahogy így:
{17: 8, 42: 1, 84: 3, 999: 0, 5: 23, 72: 4, 36: 3}
Köszi előre is a segítséget. -
Hege1234
addikt
huhh... végül csak összejött
nagyon köszi a segítséget, útbaigazítást!
#3564
fájllal nálad se akart működni?végül így tudtam csak megoldani:
import json
json_file_path = 'sample_file.json'
a_dictionary = {"list4":{"cim":"Családi videó....","Minőség":"SD","Képarány":"4:3","Időtartam":"01:26:24","Készült":"1993"}}
try:
with open(json_file_path, "r+") as j:
contents = json.loads(j.read())
contents.update(a_dictionary)
j.seek(0)
json.dump(contents, j)
except FileNotFoundError:
with open(json_file_path, "a") as j:
json.dump(a_dictionary, j)ezzel így átírva a list számot szépen hozzá is tudja adni a következőt
mivel itt a list számoltatva van és hozzá van adva +1
ezt csak úgy tudtam megoldani, hogy egy base_dictionary-t is hozzáadtam amibe csak simán van a list1 a számozott helyettlist'+str(result)try:
count = open("sample_file.json").read()
except FileNotFoundError:
print('')
try:
words = re.findall(r"list", count)
except UnboundLocalError:
print('')
try:
result = len(str(words).split())
except UnboundLocalError:
print('')
try:
result += 1
except UnboundLocalError:
print('')
base_dictionary = {"list1":{"cim":str(title), "Minőség": str(quality_m), "Képarány": str(kepar), "Időtartam": str(idot), "Készült": str(yea_r)}}
try:
a_dictionary = {'list'+str(result)+'':{"cim":str(title), "Minőség": str(quality_m), "Képarány": str(kepar), "Időtartam": str(idot), "Készült": str(yea_r)}}
except UnboundLocalError:
print('')
json_file_path = "sample_file.json"
try:
with open(json_file_path, "r+") as j:
contents = json.loads(j.read())
contents.update(a_dictionary)
j.seek(0)
json.dump(contents, j)
except FileNotFoundError:
with open(json_file_path, "w") as j:
json.dump(base_dictionary, j) -
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'}} -
Hege1234
addikt
köszi a segtségeket
így addig viszi el a folyamatokat, hogy
elkészül a fájl benne az a_dictionary a fájlban{"list1":{"cim":"Családi videó....","Minőség":"SD","Képarány":"4:3","Időtartam":"01:26:24","Készült":"1993"}}viszont újabbat pl. ha a list1- et átrom
list2-re akkor már nem tudja beleírni vagyis acontents.update(a_dictionary)
gondolom ilyenkor így már nem fut le -
-
-
kovisoft
őstag
-
kovisoft
őstag
-
sonar
addikt
Csak egy kis megjegyzés:
Múltkor olvastam egy könyvet v cikket a web parsolás témában,már nem emlékszem pontosan, de ott azt ajánlotta a szerző, hogy ha a file encoded akkor célszerű a bináris file-ba írást használni.
Az okfejtésre már nem emlékszem tisztán, de talán az volt, hogy gyorsabb és hatékonyabb és a későbbi feldolgozások (esetlegesen további decode-ok) zökkenőmentesebbek lesznek. -
-
Hege1234
addikt
import json
a_dictionary = {"list1":{"cim":"Családi videó....","Minőség":"SD","Képarány":"4:3","Időtartam":"01:26:24","Készült":"1993"}}
json_file_path = "sample_file.json"
with open(json_file_path, 'a+', encoding='utf8') as j:
contents = json.loads(j.read())
contents.update(a_dictionary)
j.seek(0)
json.dump(contents, j)ki tudnád próbálni?
nekem nem tud újat létrehozni -
-
-
Hege1234
addikt
ami van a példában list2
ezt hogyan lehet megoldani, hogy ha bekerül egy új akkor azt nekem ne kelljen átírogatni mindig?a_dictionary = {"list5":{"cim":str(title), "Minőség": str(quality_m), "Képarány": str(kepar), "Időtartam": str(idot), "Készült": str(yea_r)}}{
"list5": {
"cim": "Családi videó....",
"Minőség": "SD",
"Képarány": "4:3",
"Időtartam": "00:41:06",
"Készült": "1995"
}
}csak erre list számozásra nincs ötletem mert azt hiába index-eltem +1 értékkel
azzal úgy nem sikerült megoldani -
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.
-
Hege1234
addikt
sajnos itt, nem csak ez a gond
ha nincs már egy "list" a fájlban akkor csak error-t dob
lehet az w+ vagy a+ israise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)gyanítom amiatt, hogy ez
contents.update(a_dictionary)
arra van, ha már van benne akkor azt feltölti -
Hege1234
addikt
sziasztok!
json fájl létrehozásába, hozzáadadásába akadtam el
ezzel így miért csak feltölteni tudom a már meglévő json fájlt?
import json
a_dictionary = {"list2":{"cim":"Családi videó....","Minőség":"SD","Képarány":"4:3","Időtartam":"01:26:24","Készült":"1993"}}
json_file_path = "videók.json"
with open(json_file_path, 'r+', encoding='utf8') as j:
contents = json.loads(j.read())
contents.update(a_dictionary)
j.seek(0)
json.dump(contents, j)azért list2 szerepel mert az egy már a fjlban van különben nem írja bele..

ahhoz, hogy a "list" -ben lévő szám mindig növekedjen az update során azt, hogyan lehetne megoldani?
az r+ nem azt jelentené, hogy fájlt is létre tud hozni?
vagy ez így csak a meglévő fájlba tud írni?előre is köszi!
-
Oryctolagus
tag
Sziasztok!
Van ez a kod ami terminalban azt csinalja amit elvarok tole.
Szerveren keresek ssh eleressel valamit.
Jelen esetben csak egy serveren de valojaban tobb serveren, ezert a for ciklus.
Mivel szeretnek egy csilli-villi ablakot gombokkal ezert atdobtam a tkinterbe gondolvan, jo lesz az ha mar jo a terminalban.
De..
mivel nincs terminal ezert nem is jon ertek a talalatrol sem ezert az if-ben az else ag nem hivodik meg soha.
Valalki elmagyarazna nekme hogyan tudom a tkinterben ezt osszehozni?!
A kodhoz annyit meg hogy az elejen az ssh hoz szukseges credentioloket toroltem.
jus' sayin'
A kerdes talan az lenne hogyan tudom a terminal kimenetet a GUI-ban hasznalni?
from tkinter import *
import paramiko
servers = ['192.168.XXX.XXX']
host = ''
port = ''
username = ""
password = ""
root = Tk()
valami = Entry(root, width= 50)
valami.pack()
Vlabel = Label(root, text= valami.get())
Vlabel.pack()
command = "find /" + str(valami)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
def mybuttonClick():
for s in servers:
host = s
ssh.connect(host, port, username, password)
stdin, stdout, stderr = ssh.exec_command(command)
lines = stdout.readlines()
if not lines:
nolabel = Label(root, text= "Nincs a " + host + "serveren")
nolabel.pack()
else:
yeslabel = Label(root, text = "A " + valami + " a " + host + " serveren van")
yeslabel.pack()
Searchbutton = Button(root, text="Search the valami name", command = mybuttonClick)
Searchbutton.pack()
root.mainloop() -
Luxoros
lelkes újonc
A frame határvonalát szeretném megjeleníteni színnel , ehhez kérek segítséget.
Köszi!class BankFrame(ttk.Frame):
def __init__(self):
frame = super().__init__()# színek beállítása
self.kek = "#29a6e3"
self.sarga = "#ffd700"
self.feher = "#ffffff"
self.szurke = "#aaaaaa"
self.zold = "#5C7F52"
self.piros = "#ee3355"
self.stilus = ttk.Style()
self.stilus.theme_use('alt')
self.stilus.configure('TButton', background=self.kek,
font="Helvetica 13",
foreground=self.feher,
width=12)
self.__create_widgets(frame)
def __create_widgets(self, frame):
# kép hívása a bankframe keretbe
betolt = Image.open("Kartya_kep/hatlap.png")
self.hatlap = ImageTk.PhotoImage(betolt)
self.b_hatlap_label = ttk.Label(frame, compound='top', text='hátlap',
image=self.hatlap, relief='ridge')
self.b_hatlap_label.place(x=0, y=0)
b_sorsol_g = ttk.Button(frame, text='sorsolás', command=self.bank_event)
b_sorsol_g.place(x=100, y=0)def bank_event(self):
self.b_hatlap_label.configure(text=number.pop())
stb... -
válasz
RedHarlow
#3533
üzenetére
ha python 2 és 3 is van a gépen, akkor sima python és pip parancsokra a 2.x verzió indul el, python3 és pip3 parancsokra pedig a 3.x verzió.
Lehet több 2.x és 3.x verzió is telepítve, akkor a pontos verziószámmal indítható, pl
python3.8 -m pip install -r requirements.txt -
RedHarlow
aktív tag
válasz
sztanozs
#3532
üzenetére
Köszi, pip van telepítve mindkét gépen. Egy gépen lehet több python? python -v parancsra 2.7-et ír ki nekem a gépen de az egyik kolléga mondta, hogy átírta, hogy fusson 3.8-on is a script.
Az egyetlen kérdés ami még bennem van, hogy hogy gyűjtöm össze, hogy melyik csomagok kellenek pontosan a script futásához? Ha futtatom sajnos nem írja ki, hogy ez a package hiányzik stb.. vagy a py script elején található import sorokból (amit az előző hsz-ben is írtam) tudni fogja alapból? Azt értem, hogy a requirements.txt alapján majd a másik gépen szépen feltelepíti a packageket amik kellenek. : )
-
válasz
RedHarlow
#3531
üzenetére
kell egy requirements.txt fájl, amiben összegyűjtöd, hogy milyen csomagok kellenek és odapakolod a könyvtáradba. amikor átviszed a programot máshová, akkor kiadod a következő parancsot:
pip install -r requirements.txt
vagypython -m pip install -r requirements.txt
Persze, ha pip sincs fent (ami régebbi telepítéseknél előfurdulhat), akkor azt előbb kézzel telepíteni kell.Amúgy python 2.7-et (meg az egész 2-es vonalat) illendő volna már elfelejteni, mert 2020 január 1. óta End of Life (azaz semmilyen formában nincs támogatva).
-
RedHarlow
aktív tag
Sziasztok, nagyon alap kérdésem lenne mint kezdő pythonozó. Van két gépem, mindkettőn python 2.7. Az egyik gépről a másikra át szeretnék rakni egy egyszerű progit (nem én írtam, nem én packageltem), a fő mappát átmásoltam, majd elindítottam a scriptet. Természetesen hibát kaptam:
ImportError: No module named site
Gondolom ez azért van mert ezen a géepn nincsneek meg a megfelelő packagek. Az lenne a kérdésem, hogy hogy tudnám leggyorsabban legszebben megoldani ezt a problémát? A packagek egyik gépről a másikra átmásolhatók vagy inkább telepítsem ott is az újabb verziókat? Honnan tudom, hogy miylen packagekre van szükségem? Ki tudom listáztani valahogy? A scriptem elején van pár import de abból nem igazán jövök rá mik hiáynozhatnak.
import glob
import random
import xml.etree.cElementTree as ET
import lxml.etree as etree
from lxml.etree import tostring
from openpyxl import load_workbook
import datetime
import xlrd
import os.path
from openpyxl.compat import range
from openpyxl.utils import get_column_letterElőre is köszönöm a segítséget.
-
axioma
veterán
Csak azert hogy ha valaki netes keresessel idetalalna Munkres ugyben: az az implementacio disallowed-es peldakra idonkent vegtelen ciklusba is megy, nem csak randa (javitas: a find_smallest ha sys.maxsize-zal terne vissza akkor unsolvablematrix). A scipy implementacio van me'g pythonban, de csak disallowed nelkul, persze n*max(costmatrix)-ot irva belejuk es utoellenorizve kikerulheto.
-
axioma
veterán
Mai [sot, mar hetek ota, csak azota megtudtam hogy meglepo helyen is hasznalatban van] agybaj: a Munkres algoritmus ahogy 'third party' lib-kent meg van irva... magyar modszer paros grafban de e'l-sulyokkal, es a minimalis osszerteku maximalis parositast keressuk. Reszben lehet, hogy a szerzo python2-vel kezdte ezert is randa [nem eleg pythonic] a kod, de nem csak az rontja, mar maga a ta'rolas is rossz design dontes, mert mindig keresgeti az infot N x N matrixban ahelyett h kiolvasna' egy masik [persze karbantartando] listabol...
Tud valaki erre letezo, valamennyire kiprobalt python kodot? Ertelemszeruen kobost keresne'k, nem N**4 idoigenyut.
[Igen, meg tudom irni, sot meg is irtam. De a ceges kornyezetekbe azt nehezebb attolni, mint egy valamilyen reputacioval mar rendelkezo 3rd party-t.]
En kb. barhonnan csak ide jutottam: [link] -
Luxoros
lelkes újonc
Kedves Pythonosok!
Hogyan tudom az alábbi Tkinter programot [link] osztályban megírni. Eddig jutottam: [link]
A lényeg, hogy futtatáskor a fő ablak a tálcán marad, amig a Toplevel megnyílik és ebből lehet kattintásra a fő ablakot előhozni. Csak éppen osztályra nem tudom átültetni?! Köszi a segítséget. -
apezka
aktív tag
válasz
Angelotti
#3524
üzenetére
Ha valóban komolyan gondolkozol a fejlesztői munkán akkor inkább Java, C# irányba indulj el. A python, egyenlőre még mindig inkább "egyszerű", gyors script-elésre elterjedt, ahol nincsenek keretrendszeri kötöttségek (bár pl. tesztautomatizálásban egyre több helyen használják már). De alapjában véve komolyabb fejlesztési igényeket még mindig és vélhetően még egy jó darabig valamelyik már bevált OO nyelven valósítják meg. Persze ettől függetlenül nem árthat python tudás.
A másik dolog viszont, hogy ha egy OO nyelvet megtanulsz profi szinten (ismered a már kész osztályit és esetleges gyengeségeit) vagy éppen csak azt, hogy hol tudsz utána nézni, akkor sokkal kisebb erő ráfordítással fogod megtanulni a második, illetve 3. programozási nyelvet.
A python jó, mindent is meg lehet vele csinálni, de nem ugyan arra való, mint a Java vagy C# (egyenlőre).A tanfolyamok pedig olyanok amilyenk. Ha van érzéked a fejlesztéshez találni fogsz munkát a tanfolyam után. De igazából pár hónap alatt nem lesz az ember fejlesztő, jó pedig pláne nem. Inkább csak arra szolgál, hogy megmutatnak pár dolgot, amire az éppen aktuális partnernek szüksége van és a többi rajtad múlik. Igazából mutatnak egy irányt, ami rajtad múlik tetszik-e vagy sem.
-
Angelotti
tag
Sziasztok!
Eléggé off lesz a kérdésem, hátha kapok rá választ.

Röviden annyi, hogy karrier váltáson gondolkodom, át szeretném képezni magam programozóvá. Egy ismerősöm a Green Fox-ot javasolta, de a Junior programozó képzés keretein belül ott semmit nem foglalkoznak Python-nal. (én meg úgy tudom ez a legmainstreamebb nyelvmost már egy ideje, a Java mellett).A Ruander-nek viszont van kimondottan Python-os képzése. (náluk sincs a szoftverfejlesztői tanfolyamon belül python).
A kérdés az, hogy ha a megszerzett tudással ebben a szegmensben szeretnék elhelyezkedni érdemes e az elején Pythonra "specializálódni", vagy inkább kezdjek egy Junior szoftverfejlesztői tanfolyammal, amiben ugyan Python nincs, de Java viszont igen.
Köszi a váalszokat!
-
-
Archttila
veterán
válasz
cousin333
#3485
üzenetére
cousin333
Ma mar nem indult el az altalad irt (eddig tokeletesen mukodo) script. Megnezned nekem hogy mi lehet a gond?

Ezt kopi vissza:[alucard@arch ~/.config/waybar/modules]$ ./weather.pyTraceback (most recent call last):File "/home/alucard/.config/waybar/modules/./weather.py", line 3, in <module>import requestsModuleNotFoundError: No module named 'requests' -
JoinR
őstag
válasz
Oryctolagus
#3517
üzenetére
Na ki kellett volna próbálnom, mielőtt elküldöm sajnos a datetime esetén az elnevezésekbe könnyű belekeveredni, mert a module és a function neve is datetime. Érdemes csak 1-1 function-t importálni, és a datetime function-nek nevet adni (as dt)
Így tuti lefut:
from datetime import datetime as dtfrom datetime import timedeltadatum1 = "202105071312"current_time = dt.now()datum1 = dt.strptime(datum1, "%Y%m%d%H%M")if datum1 <= current_time - timedelta(days=30):print("Mukodik")A
datetime.timedelta(days=30)akkor működne, ha az egész module-t beimportálnádimport datetime-mal, viszont akkor a többi sornáldatetime.datetime.now()megdatetime.datetime.strptime(...)kellene, ami nem túl szép. -
JoinR
őstag
válasz
Oryctolagus
#3515
üzenetére
Így már értem. Szóval a datetime.now()-t nincs értelme olvasható stringre alakítani, maradjon így:
current_time = datetime.now()
Hanem a datum1-et alakítjuk át stringből datetime objectté:datum1 = datetime.strptime(datum1, "%Y%m%d%H%M")
Így már használható velük a timedelta function összehasonlításra, pl:if datum1 <= current_time - datetime.timedelta(days=30):... -
JoinR
őstag
válasz
Oryctolagus
#3513
üzenetére
Kicsit szét van esve ez a hsz, így nem értem mi a cél, de ha már dátum, akkor szerencsésebb lenne dátumként tárolni.
Pl.:current_time = datetime.strptime(current_time, "%Y%m%d%H%M")
Amúgy a kérdésre a válasz elvileg csakint(current_time)lenne, ha az érték stringként kerül a változóba az adatbázisból. -
Oryctolagus
tag
udv!
now = datetime.now()
current_time = now.strftime("%Y%m%d%H%M")
van ket ilyen visszateresi ertekem:ez az ertek egy adatbazisbol jon:
datum1= 202105071312current_time = 202205021234
ebbol kellene egy integer erteket kovacsolni, de nem segit ezen sem a kave sem karomkodas orankent novelt szama sem.
kerlek benneteket segitsetek!
leirtam volna milyen type a ket ertek de valamiert nem irja ki
-
Hege1234
addikt
Üdv,
Hogyan kell azt megcsinálni, hogy
2 különböző subprocess feladat különböző txt fájlokból soronként olvasson?eddig a google kereséseim a multiprocess-hez vezettek el, de az meg egyszerre
akarta a kettő folyamatot egyszerre megcsinálni
nekem fontos lenne, hogy ez a sorrend mindenképp így megmaradjon1. subprocess "rálásson" a name.txt és az mpd.txt fájl 1. sorára
amikor végzett vele.
2. subprocess "rálásson" a key.txt és az mpd.txt fájl 1. sorára
amikor végzett vele.
1. subprocess "rálásson" a name.txt és az mpd.txt fájl 2. sorára
amikor végzett vele.
2. subprocess "rálásson" a key.txt és az mpd.txt fájl 2. sorára
és így tovább... olvassa a sorokat amíg van
max 15-20 sor van egy txt fájlban, de a pontos szám az változhat
ha számít akkor semmiképp se kerül bele 30nál több sor egy fájlba
és ilyenkor minden txt fájlban ugyanannyi sor vankiegészítem egy kicsit, hogy ne forduljon elő újra, hogy kihagyok valamit mint a múltkor
1. subprocess
a name.txt -t kellene eljuttattani a végére ahol a video van
az mpd.txt -t pedig az mpd helyéresubprocess.run([yt_dl, '--no-warning', '--no-check-certificate', '--allow-u', '-f', 'bv[height<='+quality+'][vbr<30000]', '-S', '+codec:h264', '-o', video, mpd])2. subprocess
a key.txt -t kellene oda eljuttattani ahol a *keys van
a name.txt -t kellene eljuttattani a végére ahol a video vansubprocess.run([mp4decr, *keys, video, videoout])tisztában vagyok vele, hogy nagyon komplex kérdés lett
előre is köszi, akinek van valami ötlete, hogyan lehetne ezt így megvalósítani!#3510 axioma
nekem bejön, hogy ennyire részletes python-ban a hibák kiírása
nem piszkálnám meg, ha továbbfutna magától (mint batch-ban) és nem állítja meg emiatt a programot
persze okés így is, hogy én határozom meg, hogy mit írjon ki hibaként
csak én meg nem vagyok annyira pedáns, hogy részletesen ismertessem a hibát mint ahogy azt alapból kiírja és
így ami nekem egyértelmű, ha másnak feldobná azt a hibát amit én csak skiccnek odaírtam az agybajt kapna.. -
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). -
Hege1234
addikt
nem kell, hogy ki tudjanak belőle lépni
(majd max bezárják abból kevesebb a gond
)
ez így tökéletes, köszi a dict-es kiegészítést is a komplexebbekhez azt fogom használni
lehet felsorolást tenni az expect után?
except ValueError,KeyError:mert nekem erre hibát dobott
különszedve működött és az options= végén kicserélve } használvaegyébként bill figyelés is egy jó ötlet

mivel a batch fájlban a menük egérrel és bill-el is irányíthatóak
jó lenne ide python-ra is áthozni ezt a funkciót
bill kurzorokra találtam megoldást amivel lehet navigálni, de egérrel navigálást még nem
létezik erre megoldás?
mert a tkinter és hasonló társainak a konzolra nincs hatásuksh4d0w
ezt valahogy a dict-es példával és az előttivel
se tudtam működésre bírni -
while True:ans = input('Kerem a szamot: ')num = int(ans)if num not in [1,2,3,4,5,0]:continueelse:blablablablabla -
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.) -
Hege1234
addikt
def pick(options):
print("\nminőség kiválasztása:\n")
for idx, element in enumerate(options):
print("{} = {}".format(idx + 1, element))
while True:
try:
ans = input("\nírd ide a számot: ")
num = int(ans)
break
except ValueError:
print("ide csak számot írhatsz!")
continue
try:
if 0 < int(num) <= len(options):
return int(num) -1
except:
return None
options = ["1080", "720", "540", "480", "360"]
res = pick(options)
try:
quality = options[res]
print(quality)
except TypeError:
print("csak 1-5-ig írhatsz ide számot!")beleírtam amit tanácsoltál és kiszedtem az i-t is
már csak számokat fogad elazt pl. hogyan kell megoldani hogy ne léptessen ki, ha 0 van beleírva vagy pedig pl. 13?
semmi iskolai feladat vagy hasonló, kimondott tutorial-t sem követek
(persze, utánaolvasok a dolgoknak mit, hogyan kellene)van egy kb 2500 soros .bat fájlom amit elkezdtem átírni python-ra
kombinálva tkinter-el szóval még sokminden idegen ezen a nyelven..most csak annyi volt a célom, hogy egy beírt szám
meghatározott értékét
eljuttassam a subprocess-nek'+quality+'subprocess.run([yt_dl, '--no-warning', '--no-check-certificate', '--allow-u', '-f', 'bv[height<='+quality+']', '--fixup', 'never', '-N', '16', '-o', video, mpd]) -
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'. -
Hege1234
addikt
válasz
cousin333
#3500
üzenetére
köszönöm!

háát most így elnézve, valóban vérzett

közben nekem is sikerült összehozni

def pick(options):
print("\nminőség kiválasztása:\n")
for idx, element in enumerate(options):
print("{} = {}".format(idx + 1, element))
i = input("\nírd ide a számot: ")
try:
if 0 < int(i) <= len(options):
return int(i) - 1
except:
pass
return None
options = ["1080", "720", "540", "480", "360"]
res = pick(options)
quality = options[res]
print(quality)axioma:
köszi neked is!bar szemely szerint inkabb az input-nal rogton konvertalnam
ezt kifejtenéd kicsit bővebben?
input-ot sokszor hasznánlom hátha későbbiekben hasznos lesz, ha egyből konvertálásra kerül
Új hozzászólás Aktív témák
- iPhone 17 256 GB Sage - Bontatlan !! www.stylebolt.hu - Apple eszközök és tartozékok !!
- ÁRGARANCIA!Épített KomPhone i5 12400F 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 14 Pro 256GB Space Black -1 ÉV GARANCIA -Kártyafüggetlen, MS3235
- LG 38WN95C - 38" Ívelt NANO IPS - 3840x1600 - 144hz 1ms - Nvidia G-Sync - AMD FreeSync - ThunderBolt
- BESZÁMÍTÁS! ASRock Z390 i5 8600K 16GB DDR4 512GB SSD RX 6500 XT 8GB Bitfenix Neos acél DeepCool 450W
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest








