- Honor Magic V3 - mágikus realizmus
- Yettel topik
- Motorola Edge 40 - jó bőr
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- iPhone topik
- Honor Magic6 Pro - kör közepén számok
- Íme az új Android Auto!
- Megjelent a Poco F7, eurós ára is van már
- Amazfit Active 2 NFC - jó kör
- Kiszivárgott a Pixel 10 Pro
Új hozzászólás Aktív témák
-
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 os
start_string = 'START'
stop_string = 'STOP'
name_string = 'Adat:'
filename = None
output_file = None
with 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 ) + 2
filename = line[loc:loc+8]
Elképzelhető, hogy kicsit módosítani kell a számokon, de azt már meg tudod nézni.
-
sztanozs
veterán
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 os
start_string = 'START'
stop_string = 'STOP'
file_string = 'Adat:'
filename = ''
output_file = None
with 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ájlnevet
else:
output_file.write(line)
-
sztanozs
veterán
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 -
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
- BESZÁMÍTÁS! Asus ROG Flow Z13 + ROG XG RTX 3070 - i9 12900H 16GB DDR5 RAM 1TB SSD + RTX 3070 8GB WIN
- Garanciális gamer notebook RÉSZLETRE bank és kamat nélkül, gyors szerződéssel! ASUS TUF Gaming F16
- Csere-Beszámítás! RTX Számítógép játékra! R5 5600X / RTX 3080 / 32GB DDR4 / 1TB SSD
- SanDisk Extreme Portable 8TB (SDSSDE61-8T00-G25)
- Eladó karcmentes állapotban levő Apple iPhone 14 Plus 256GB / AKKU 100% / 12 hónap jótállás
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest