Ú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
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- OLED monitor topic
- Apple MacBook
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Szeged és környéke adok-veszek-beszélgetek
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Projektor topic
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Pedzegeti az új Xbox irányát a Microsoft
- További aktív témák...
- Tp-Link Archer C64 Dual Band Full Gigabit Wi-Fi router
- DELL Latitude 3490,14",FHD,i5-7200U,8GB DDR4,256GB SSD,WIN11
- Dell Optiplex/Precision MT/SFF 3430, 3050, 3060, 3070, 5070, 7060/ 7.-8.-9.gen/ SZÁMLA- GARANCIA
- Apple iPhone 14 128GB,Újszerű,Adatkabel,12 hónap garanciával
- Logitech Mx mechanical master series magyar keyboardlabor gmail.com
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
