Gå til innhold

[Python] Hente ut spesifik tekst fra ett dokument


Anbefalte innlegg

Jeg har en Creole formatert artikkel, og ønsker å hente ut alt som står fra en bestemt overskrift til neste overskrift.

 

Er det noen som kan vise meg i riktig retning?

 

==Overskrift 1==
Dette er en overskrift. De er ganske greie å ha.

==Overskrift 2==
Her er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjøre med en tekst.

Avsnitt er også greit. 

==Overskrift 3==
Da var dette dokumentet slutt, og du kan finne deg ett nytt ett

 

Jeg ønsker alt som står under Overskrift 2. Samtlige avsnitt.

 

Edit: Bedre tittel

Edit2: Demo tekst

Endret av Scix
Lenke til kommentar
Videoannonse
Annonse

uten å ha sett mye over det, men hva med å laste det inn i en streng for så å bruke string.split("=="). Du vil da få en liste delt opp slik:

 

0: Det før første overskrift

1: Første oversrkfit

2: Teksten under første oversrkfit

3: Andre oversrift

 

Eller enkelt gitt med:

 

overskrift n = (2*n)-1

og tekst under overskrift l = 2*l

 

La oss si du vil ha oversrkfit 5 med teksten under:

2*5-1 = 9

2*5 = 10

Da vil element 9 i listen være oversrkfiten og element 10 være teksten.

 

Edit: Nå forutsatte jeg at du klarte å laste ned artikkelen da

Endret av etse
Lenke til kommentar

Du kan ta ut tekst basert på line nummer.

for i,line in enumerate(open("c.txt")):
   if i >= 3 and i < 8:
       print line,

'''-->Out
==Overskrift 2==
Her er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjøre med en tekst.

Avsnitt er også greit. 
'''

Eller på en line.

print(''.join(open('c.txt').readlines()[3:8])),

En som tar ut linjer mellom overskrift 2 og 3

flag = 1
linelist = open('c.txt')
for line in linelist:
   if line.startswith('==Overskrift 2=='):
       flag = 0
   if line.startswith('==Overskrift 3=='):
       flag = 1
   if not flag and not line.startswith('==Overskrift 2=='):
      print line,

'''-->Out
Her er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjøre med en tekst.

Avsnitt er også greit. 
'''

En med linecache(Standard Library)

import linecache

start_line = 3
end_line = 8
for i in range(start_line,end_line):
   line = linecache.getline('c.txt', i)
   print line,

Endret av SNIPPSAT
Lenke til kommentar

Du kan ta ut tekst basert på line nummer.

for i,line in enumerate(open("c.txt")):
   if i >= 3 and i < 8:
       print line,

'''-->Out
==Overskrift 2==
Her er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjøre med en tekst.

Avsnitt er også greit. 
'''

Eller på en line.

print(''.join(open('c.txt').readlines()[3:8])),

En som tar ut linjer mellom overskrift 2 og 3

flag = 1
linelist = open('c.txt')
for line in linelist:
   if line.startswith('==Overskrift 2=='):
       flag = 0
   if line.startswith('==Overskrift 3=='):
       flag = 1
   if not flag and not line.startswith('==Overskrift 2=='):
      print line,

'''-->Out
Her er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjøre med en tekst.

Avsnitt er også greit. 
'''

En med linecache(Standard Library)

import linecache

start_line = 3
end_line = 8
for i in range(start_line,end_line):
   line = linecache.getline('c.txt', i)
   print line,

 

Bruk denne, er dette den beste manus =)

Endret av hernil
Lenke til kommentar

regex kan fikse det der..

>>> import re
>>>
>>> def getText(overskrift, fulltekst):
...   r = re.search(r'(?ms)^==%s==$([^(==)]+)' % overskrift, fulltekst)
...   if r:
...     return r.group(1)
...
>>> getText("Overskrift 1", t)
'\nDette er en overskrift. De er ganske greie  ha.\n\n'
>>> getText("Overskrift 2", t)
'\nHer er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjrrrrrrrre med en tekst.\n\nAvsnitt er ogs greit. \n\n'
>>> getText("Overskrift 3", t)
'\nDa var dette dokumentet slutt, og du kan finne deg ett nytt ett\n'
>>>

 

Også:

>>> def getAvsnitt(text):
...   r = re.findall(r'(?m)^==(.+?)==$', text)
...   return r
...
>>> getAvsnitt(t)
['Overskrift 1', 'Overskrift 2', 'Overskrift 3']

 

Edit: Fikset første regex litt

 

Edit2:

>>> for avsnitt in getAvsnitt(t):
...  print "Viser avsnitt", avsnitt
...  print getText(avsnitt, t)
...
Viser avsnitt Overskrift 1

Dette er en overskrift. De er ganske greie  ha.


Viser avsnitt Overskrift 2

Her er enda en overskrift. Det er helt utrolig hvor mye godt en overskrift kan gjrrrrrrrre med en tekst.

Avsnitt er ogs greit.


Viser avsnitt Overskrift 3

Da var dette dokumentet slutt, og du kan finne deg ett nytt ett

Endret av Terrasque
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...