Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz adam0913 #1100 üzenetére
3-as verziótól a print nem utasítás, hanme függvény (kell zárójel az argumentumok köré):
print('{0}, {1}'.format(inmate['name'], inmate['age']))
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
sonar
addikt
-
-
justmemory
senior tag
válasz adam0913 #1126 üzenetére
Szia,
szerintem amit te szeretnél, azt utólag, az Excelben való "mókolással" lehet a legegyszerűbben megoldani, hiszen alapvetően .csv kiterjesztésbe mented a python scriptben az adatokat; a .csv-t pedig - tudomásom szerint, de javítsatok ki, ha tévedek, mert nem vagyok nagy Excel guru - az Excel úgy nyitja meg, hogy egyetlen sorba írja ki. Ezen utólag lehet változtatni úgy, hogy magában az Excelben állítod be, hogy mondjuk a vesszők (vagy pontosvesszők) mentén szedje szét a sort, és tegye őket külön cellába...
Ha nagyon nagy butaságot írtam, bocsesz, de jelen tudásom szerint én kb. így csinálnám; nagyon nem néztem utána...
Egyébként a másik megoldás, hogy valamilyen adatbázisba (pl. sql) teszed be az adatokat, és akkor onnan mondjuk egy saját, adatbáziskezelős kis alkalmazással nyitogatod meg, és nem Excel-el. Persze ha Excel-ben kell dolgozz vele utána, az más...
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz adam0913 #1128 üzenetére
Sql adatbázishoz te magad adod meg, hogy melyik "cellába" mit és hogyan (milyen formátumban - pl. dátum, szám, stb.) mentsen (ok, talán a sorszámozás kivétel ez alól). Most így hirtelen a kódot nézve nem biztos, hogy direkt módon kellene/lehetne megoldani, hanem akár egy lista vagy valami más közbeiktatásával (változók külön-külön adatoknak).
Windows alatt nem használtam még sem a python-t, sem az sql-t, szóval lehet, hogy amit írok az nem mindig válik be. Linux egyszerűbb ilyen szempontból...
Azt is el kell döntened, hogy sqlite-ot vagy mondjuk mysql-t akarsz-e használni, mert picit más a metódusa az adatok kinyerésének is, plusz egyéb más specialitások is vannak. Az adatbáziskezelős dolog azért picit trükkösebb - vagy nekem legalábbis az volt - annál, mint hogy simán kiírod egy fájlbaA stackoverflow is jó; én olykor még a zetcode-ot is nézegettem. Plusz bármi mást, ami az adott problémámra releváns megoldást kínált...
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz adam0913 #1130 üzenetére
Persze, hogy úgy hivatkozik rá, hiszen úgy tetted be gyakorlatilag egyetlen cellába, ezt jól látod
Azt a sort kellene picit megkezelni szerintem, hogy:for data in record.findAll('td'):
datatable = datatable+","+data.textItt a
data
lesz a kulcs (pontosabban adata.text
), ezeket kellene afor
ciklus alatt a különböző "adatbáziscellákba" elhelyezni szerintem.
Ez annyiból trükkös szerintem, hogy figyelned kell, hogy éppen melyik adatnál jársz (pénznem, devizanév, egység, pénznemforintban) afor
ciklus alatt, hogy azt az adatot a megfelelő cellába tudd tenni.Tegyük hozzá, hogy picit vaktában találgatok, mert közben nem próbálgatom itt konzolban...
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
nagyúr
válasz adam0913 #1126 üzenetére
arra gondoltam, hogy egy csv-nél vannak formázási lehetőségek, amiket használhatsz.
pl. a0,1,2,3
és a"0";"1";"2";"3"
ugyanaz a csv.és igen, ettől még meg kell oldanod, hogy az utolsó két oszlop az ne folyjon össze. ezért vagy egy listába parseolsz, és utána a lista két utolsó oszlopát összeadod, a szükségtelen elemeket pedig eltávolítod. így elég csak a csv.writernél formázni a csv-t.
#csv előkészítés
filename=r'path\output.csv'
#én ezeket (encoding, stb.) használom, egyéb megkötések miatt
resultcsv=open(filename,"w", encoding="iso-8859-15", newline='')
output=csv.writer(resultcsv, delimiter=';',quotechar = "'")
#ha valami az egy tömb az adatokkal
for row in valami:
row[3]=(str(row[3])+","+str(row[4]))
del row[4]
output.writerow(row)
#végül lezárjuk, vagy átírhatod with:-re és akkor nem kell
resultcsv.close()[ Szerkesztve ]
Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.
-
justmemory
senior tag
válasz adam0913 #1135 üzenetére
Szia,
csak azt nem írtad meg, hogy létrehozza-e a táblát ezzel a módszerrel... Egyébként szerintem ennek a módszernek működnie kellene, szerintem én is így csinálnám, ennél egyszerűbb szerintem nincsen... (Mármint annál egyszerűbb, hogy egy változóban tárolt névvel hozz létra táblát, és ehhez a
create table
-t használod.)
Annyit azért hozzá kell tegyek, hogy a az aposztrófokkal (",') sokat kellett kísérletezzek, mire sikerült a változó és egyéb infókat úgy betennem, hogy aztán azt is csinálja a program, amit akartam--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
válasz adam0913 #1137 üzenetére
Szerintem az aposztrófok miatt. Ha én hozzá szeretnék tenni egy változóban tárolt értéket az adatbázisomhoz, akkor a kód a következő:
cur.execute('insert into TABLE(Datum, Valami, Valami) \
values("'+str(mai_datum)+'", "'+str(valami_ertek)+'", "'+str(valami_ertek)+'");')Nézd meg, hogy az aposztrófok hogyan alakulnak... Még nem hoztam létre változóval táblát, de feltételezem, hogy nagyjából hasonló elv mentén kellene megpróbálni. Hozzá kell tegyem azt is, hogy én már nem MySQL-t, hanem SQLite3-at használok, de szerintem ebben olyan nagy különbség nincs.
[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
sztanozs
veterán
válasz adam0913 #1135 üzenetére
query = """CREATE TABLE IF NOT EXISTS {tabla_nev} (
`Megnevezes` varchar(100) DEFAULT NULL,
`Ev1` varchar(100) DEFAULT NULL,
`Ev2` varchar(100) DEFAULT NULL,
`Ev3` varchar(100) DEFAULT NULL,
`Ev4` varchar(100) DEFAULT NULL,
`Ev5` varchar(100) DEFAULT NULL,
`ID` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8""".format(tabla_nev=name)és
query = """load data local infile 'C:/Python27/output.csv'
into table {tabla_nev}
character set latin1
fields terminated by ';'
enclosed by '"'
lines terminated by '\r\n'
ignore 1 lines;
""".format(tabla_nev=name)De a name változó csak ellenőrzött forrásból jöjjön, különben: [link]
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
válasz adam0913 #1143 üzenetére
Ha sqlite akkor csak körbe kell rakni szögletes zárójellel vagy macskakörömmel:[Tabla 123 akarmi]
vagy"Tabla 123 akarmi"
Forrás: [link]#1145 - mysql-re meg mégjobb ez:
Csinálhatsz a forás névből egy hash-t és az lesz a tábla neve, nem lesz ütközés, és bármi lehet az eredeti név:
import hashlib
...
table_name = hashlib.sha256(name).hexdigest()Kódban így néz ki:
query = """CREATE TABLE IF NOT EXISTS "T_{tabla_nev}" (
`Megnevezes` varchar(100) DEFAULT NULL,
`Ev1` varchar(100) DEFAULT NULL,
`Ev2` varchar(100) DEFAULT NULL,
`Ev3` varchar(100) DEFAULT NULL,
`Ev4` varchar(100) DEFAULT NULL,
`Ev5` varchar(100) DEFAULT NULL,
`ID` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8""".format(tabla_nev=table_name)
ésquery = """load data local infile 'C:/Python27/output.csv'
into table "T_{tabla_nev}"
character set latin1
fields terminated by ';'
enclosed by '"'
lines terminated by '\r\n'
ignore 1 lines;
""".format(tabla_nev=table_name)[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Új hozzászólás Aktív témák
- Tyű-ha Lenovo Thinkpad T14 G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 16GB /512GB FHD IPS
- Ej-ha Lenovo Thinkpad T14 G2 Üzleti "Golyóálló" Laptop 14" -50% i7-1185G7 4Mag 32GB /512GB FHD IPS
- Eladó Nitro Venture TLS Snowboard Bakancs 46-os
- Eladó Nitro Team 2022 162W Snowboard Deszka
- Új Lenovo Ideapad Flex 5 x360 Érintős Hajtogatós Laptop Tab 15,6 -30% Bivaly AMD Ryzen 5 5500U 8/512
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest