Hirdetés
- Poco X8 Pro Max - nem kell ide sem bank, sem akkubank
- Xiaomi 15T Pro - a téma nincs lezárva
- Xiaomi 17 Ultra - jó az optikája
- Fotók, videók mobillal
- One mobilszolgáltatások
- Fittyet hány a pesti napfényre a Honor 600
- Samsung Galaxy A57 - kecses test, lusta lélek
- Xiaomi 14 - párátlanul jó lehetne
- Apple iPhone 17 Pro Max – fennsík
- Így spórolhat az Apple az iPhone 18 kijelzőin
Ú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
- GYÖNYÖRŰ iPhone 14 Pro Max 128GB Space Black - 1 ÉV GARANCIA -Kártyafüggetlen, MS4332
- AKCIÓ! Intel Core i7 8700 6 mag 12 szál processzor garanciával hibátlan működéssel
- HIBÁTLAN iPhone 15 Pro 128GB Black Titanium-1 ÉV GARANCIA - Kártyafüggetlen, MS4653
- (NAGYOBB MENNYISÉG) HASZNÁLT Videokártya, Processzor, Memória, Tárhely
- ÁRGARANCIA!Épített KomPhone i5 10400F 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

