Hirdetés
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
- Samsung Galaxy A57 - kecses test, lusta lélek
- Megérkezett Európába a Soundcore Space 2 fejhallgató
- Hivatalos a OnePlus Watch 4
- Így spórolhat az Apple az iPhone 18 kijelzőin
- OnePlus 15 - van plusz energia
- Fittyet hány a pesti napfényre a Honor 600
- Mobil flották
- iOS alkalmazások
- Microsoft Rewards
Új hozzászólás Aktív témák
-
F1DO
senior tag
Jó, mostmár beugrott, működik.
Az
enumerate(fajl.readlines()):
helyett:
enumerate(az egy tételt kiadó, össze appendelt lista neve): -t adom meg és így már úgy viselkedik ahogy elképzeltem, az appendelős for ciklus után betéve a kódod egy 'összeállított' file-ba írandó tétel után kiírja a hozzá tartozó keresett szót. Ez mehet változóba és filenévként...Köszönöm
-
cousin333
addikt
Ebben az esetben egyszerűen így módosítanám a korábbi kódomat:
import osstart_string = 'START'stop_string = 'STOP'name_string = 'Adat:'filename = Noneoutput_file = Nonewith open('szoveg.txt', 'r') as input_file:for line in input_file:if line.startswith(start_string):output_file = open('output.txt', 'w')elif line.startswith(stop_string):output_file.close()if filename is not None:os.rename('output.txt', filename + '.txt')else:output_file.write(line)if name_string in line:loc = line.find(name_string )loc += len(name_string ) + 2filename = line[loc:loc+8]Elképzelhető, hogy kicsit módosítani kell a számokon, de azt már meg tudod nézni.
-
Ha nem kell több sorban keresni akkor így:
fajl = open("forrásfile.TXT", "r")
kifejezes = 'valami'
hossz = 8
talalatok = []
for sor, szoveg in enumerate(fajl.readlines()):
try:
# ha a kifejezes nem kell +2 space, csak utána 8
talalat = szoveg[szoveg.index(kifejezes)+len(kifejezes)+2:][:hossz]
talaltok += [sor, talalat]
print(sor, talalat)
except:
pass -
cousin333
addikt
Továbbra is úgy gondolom, hogy neked felesleges a sorszámokkal foglalkozni, elvégre a START sztring és a STOP sztring nincs átfedésben. Egyszerűen végig kell menni a fájlon, és kiírogatni a megfelelő sorokat, majd nyitni egy új fájlt, oda is kiírni... stb.
Tegyük fel, hogy van a szoveg.txt fájlod, amit fel akarsz dolgozni:
blahbla
blahbla2
START
Első sor
Adat: valami
még egy sor
STOP
blah
START
Új fájlba
újabb sor
Adat: minden
STOP
semmiEkkor csak egyszer végig kell menni a fájlon és keresni a megfelelő sorokat. A nehézséget csak az jelenti, ha a START és a STOP között van a sor, ami a fájlnevet adja, így azt nem tudhatjuk előre. Ilyenkor azt csinálnám, hogy univerzális fájlnevet adok, és a végén átnevezem:
import osstart_string = 'START'stop_string = 'STOP'file_string = 'Adat:'filename = ''output_file = Nonewith open('szoveg.txt', 'r') as input_file:for line in input_file:if line.startswith(start_string):output_file = open('output.txt', 'w')elif line.startswith(stop_string):output_file.close()os.rename('output.txt', filename + '.txt')elif line.startswith(file_string):filename = line[6:] # Vagy ahogy ki kell találni a fájlnevetelse:output_file.write(line) -
ha a kifejezés csak egyszer van:
szoveg = 'valami másvalami'
kifejezes = 'más'
hossz = 3
try:
ix = szoveg.index(kifejezes)
# ha a kifejezes is kell + hossz
print('kif szoveg: ', szoveg[ix:ix+len(kifejezes)+hossz])
# ha a kifejezes nem kell
print('csak szoveg: ', szoveg[ix+len(kifejezes):ix+len(kifejezes)+hossz])
except:
passha a kifejezés többször is van:
szoveg = '''valami másvalami
még másvalami
egészen más'''
kifejezes = 'más'
hossz = 3
try:
while True:
ix = szoveg.index(kifejezes)
# ha a kifejezes is kell + hossz
print('kif szoveg: ', szoveg[ix:ix+len(kifejezes)+hossz])
# ha a kifejezes nem kell
print('csak szoveg: ', szoveg[ix+len(kifejezes):ix+len(kifejezes)+hossz])
szoveg = szoveg[ix+len(kifejezes)+hossz:]
except:
passha a kifejezés többször is van, és eleje-vége között kell a szöveg:
szoveg = '''random szöveg
valami másvalami
még másvalami
egészen más
szöveg ami bekavarhat :D'''
eleje = 'más'
vege = 'mi'
try:
while True:
ix = szoveg.index(eleje )
iy = szoveg[ix:].index(vege)
# találat
print(szoveg[ix:ix+iy+len(vege)])
szoveg = szoveg[ix+iy+len(vege):]
except:
pass -
F1DO
senior tag
Az indentálás nem jelenik meg helyesen valamiért a fórummotor kiveszi így aláhúzással jelölöm
kezdet = 0
vege = 1
while vege < max(sorszamlista):
____print('text kezdete: ',sorszamlista[kezdet]) # teszt kiíratás
____print('text vége: ',sorszamlista[vege])
____sorkoz = range(sorszamlista[kezdet]-1, sorszamlista[vege]+1)____for n in sorkoz :
_________print(text[n].rstrip()) # text = fajl.readlines() #tesztelésképp kiíratás
_________print('Következő tétel ##########################')
____kezdet+=2
____vege+=2 -
Siriusb
veterán
Tipikus helyzet, amikor egy példával illusztrálva sokat segítenél. No meg, hogy mit jelent a nagy fájlméret nálad. Az is fontos lehet, hogy vannak-e sorvégződések, egy soron belül keresed-e az adott szövegrészt, vagy több sorba átnyúlik stb.
Pl. ha be tudod olvasni egyszerre az egész szövegfájlt, valószínűleg egy regex kifejezéssel (re modul) szépen meg lehetne oldani, én legalábbis ez irányba indulnék el így látatlanban. -
cousin333
addikt
Mi van meg eddig? Őszintén szólva csak részben értem a problémát. A szövegrész, amit keresel az egy sorban van, vagy több sor között szétosztva? Valami konkrét sztringet keresel? A sor elején van, a közepén, vagy különálló sor?…
Pythonban van arra lehetőség, hogy egy for ciklussal menj végig a fájlon. Pl.:
with open(‘d:/szoveg.txt’, ‘r’) as ifile:for i, line in enumerate(ifile):print(‘sorszam:’, i, ‘tartalom:’, line)Bár nem tudom, mivel próbálkoztál, de szerintem nincs szükséged a sorszámra a feladat megoldásához. Ezt inkább valami generátor függvénnyel gondolnám megoldani. Megnyitja a fájlt, soronként kiolvassa, mindig amíg a kérdéses sor nem következik.
Új hozzászólás Aktív témák
Hirdetés
- Acer Nitro 15 gamer laptop! -i7 9750H, RTX 2060 6gb, 32gb DDR4, 500gb SSD, 1tb HDD
- 3-in-1 PRÉMIUM USB-C HUB /Samsung Dex, MacBook, Surface, Chromebook ,Huawei,Motorola
- Üvegfólia,hidrogél fólia: iPhone ,Honor,Google Pixel,,Nothing Phone,Motorola, Samsung telefonokhoz
- 2TB HDD 100/100 - Több darab!
- Gigabyte AORUS 16X - Core i9 14900HX - 32gb ram - RTX 4090 (175W) 1TB SSD + 2027 januárig gyári gar
- ASUS TUF RTX 5090 OC 32GB GDDR7 TUF-RTX5090-32G-GAMING Videokártya! BeszámítOK
- QNAP TS-870U-RP 8 lemezes Rack NAS
- Gamer PC-Számítógép! Csere-Beszámítás! I7 9700 / RTX 3070 / 16GB DDR4 / 1TB SSD!
- SK Hynix PC811 2TB PCI-E 4.0 x4 nvme SSD 7000/6500MB/s
- Újszerű Apple MacBook Air 13 M2 (2022) 8GB/256GB - 61 Ciklus - 91% akku - MAGYAR
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

