Discussion:
Gelijken zoeken in een tekstbestand
Jeroen Hendrickx
2010-06-06 15:34:58 UTC
Permalink
Beste lijstlezers

Voor een onderzoekje heb ik een redelijk repetitief taakje moeten
uitvoeren over 972 wav-files. De resultaten van elk script worden in een
tekstbestand (.txt) lijn per lijn weggeschreven. Nu heb ik in het
resulterend tekstbestand 988 lijnen, dus zestien meer dan de bedoeling
was. Er staan geen lege interlinies.
Ik geef zo een lijntje om jullie een idee te geven:

131_02_RO_1_1A_POOT 0 305.14089460960304
359.5485848841854 1326.822185789753

131_02_RO_1_1A_POOT is de naam van dat bestand, ik heb er in de gehele
file dus een paar dubbel. Heeft iemand van jullie een idee hoe ik dat
kan terug vinden zonder elke naam te moeten copiëren in een
zoek-venstertje, dat zou even omslachtig zijn als het werk tot hiertoe,
en geloof me...

Ik weet dat er voor Unix/Linux erg mooie commandline teksttools zijn,
maar ik ben het niet gewoon om hiermee te werken.

Eender welke tip is welkom,

Jeroen
--
Ubuntu-NL mailing list
Ubuntu-NL-***@public.gmane.org
Info/Uitschrijven: https://lists.ubuntu.com/mailman/listinfo/ubuntu-nl
Ward De Ridder
2010-06-06 17:29:54 UTC
Permalink
Als je een beetje je weg kent in python is dit een fluitje van een
cent. Ik denk dat dit doet wat het moet doen:

invoer = open('input.txt', 'r').read()
gesplitst = invoer.split("\n")
for i in range(0, len(gesplitst)):
lijnI = gesplitst[i].split()
if (len(lijnI) > 0):
for j in range(0, len(gesplitst)):
lijnJ = gesplitst[j].split()
if (len(lijnJ) > 0):
if (j != i) and (lijnI[0] == lijnJ[0]):
print lijnI[0]

Dit ten minste als ik je goed begrepen heb, en je wil weten ofdat het
eerste woord van iedere lijn uniek is.
Dit is gewoon op een paar minuten in elkaar geboxt, niet echt
uitgebreid getest, maar dit zou de eerste woorden die dubbel zijn als
output moeten teruggeven.
Deze code zet je in een bestandje (geef het bijvoorbeeld de naam
dubbel.py) in dezelfde map als waar je uitvoer bestand staat (om deze
code te laten werken moet je het de naam input.txt geven). Als je dan
in een terminalvenster navigeert naar de map waar dit bestandje staat,
en je start het script door
python dubbel.py te typen, dan zou je een lijst moeten krijgen met dubbels.
Python is een fantastisch taaltje om dingen te automatiseren, en het
grote voordeel is, het werkt met ieder os, en het is helemaal niet
moeilijk om te leren.

Ward

Op 6 juni 2010 17:34 heeft Jeroen Hendrickx
Post by Jeroen Hendrickx
Beste lijstlezers
Voor een onderzoekje heb ik een redelijk repetitief taakje moeten
uitvoeren over 972 wav-files. De resultaten van elk script worden in een
tekstbestand (.txt) lijn per lijn weggeschreven. Nu heb ik in het
resulterend tekstbestand 988 lijnen, dus zestien meer dan de bedoeling
was. Er staan geen lege interlinies.
131_02_RO_1_1A_POOT      0      305.14089460960304
 359.5485848841854      1326.822185789753
131_02_RO_1_1A_POOT  is de naam van dat bestand, ik heb er in de gehele
file dus een paar dubbel. Heeft iemand van jullie een idee hoe ik dat
kan terug vinden zonder elke naam te moeten copiëren in een
zoek-venstertje, dat zou even omslachtig zijn als het werk tot hiertoe,
en geloof me...
Ik weet dat er voor Unix/Linux erg mooie commandline teksttools zijn,
maar ik ben het niet gewoon om hiermee te werken.
Eender welke tip is welkom,
Jeroen
--
Ubuntu-NL mailing list
Info/Uitschrijven: https://lists.ubuntu.com/mailman/listinfo/ubuntu-nl
--
Ubuntu-NL mailing list
Ubuntu-NL-***@public.gmane.org
Info/Uitschrijven: https://lists.ubuntu.com/mailman/listinfo/ubuntu-nl
Jeroen Hendrickx
2010-06-07 08:07:39 UTC
Permalink
Snel eventjes antwoorden. Er kwamen bij mij persoonlijk ook een paar
antwoorden toe die de lijst niet gezien heeft, dus een heel korte
samenvatting wordt in het antwoord meegegeven.

Vincent, het tekstbestand in een spreadsheet opnemen had ik inderdaad
ook al geprobeerd, maar dat lukt niet. De "kolommen" werden in het
script wel met tabs "gesepareerd", maar blijkbaar niet, of niet genoeg
voor Rekenblad om ze in kolommen te gieten.

Ward, ja, je hebt gelijk, die python ga ik zeker eens bekijken wanneer
ik daar wat meer tijd voor heb. Het ziet er tegelijkertijd erg makkelijk
en toch erg efficiënt uit.

Maar Tims voorstel hiervoor uniq te gebruiken was zo snel geklaard dat
ik de resultaten nog geen vijf minuten later kon doorsturen.

In ieder geval bedankt allen, ik heb in ieder geval weer wat geleerd.

Jeroen
Post by Ward De Ridder
Als je een beetje je weg kent in python is dit een fluitje van een
invoer = open('input.txt', 'r').read()
gesplitst = invoer.split("\n")
lijnI = gesplitst[i].split()
lijnJ = gesplitst[j].split()
print lijnI[0]
Dit ten minste als ik je goed begrepen heb, en je wil weten ofdat het
eerste woord van iedere lijn uniek is.
Dit is gewoon op een paar minuten in elkaar geboxt, niet echt
uitgebreid getest, maar dit zou de eerste woorden die dubbel zijn als
output moeten teruggeven.
Deze code zet je in een bestandje (geef het bijvoorbeeld de naam
dubbel.py) in dezelfde map als waar je uitvoer bestand staat (om deze
code te laten werken moet je het de naam input.txt geven). Als je dan
in een terminalvenster navigeert naar de map waar dit bestandje staat,
en je start het script door
python dubbel.py te typen, dan zou je een lijst moeten krijgen met dubbels.
Python is een fantastisch taaltje om dingen te automatiseren, en het
grote voordeel is, het werkt met ieder os, en het is helemaal niet
moeilijk om te leren.
Ward
Op 6 juni 2010 17:34 heeft Jeroen Hendrickx
Post by Jeroen Hendrickx
Beste lijstlezers
Voor een onderzoekje heb ik een redelijk repetitief taakje moeten
uitvoeren over 972 wav-files. De resultaten van elk script worden in een
tekstbestand (.txt) lijn per lijn weggeschreven. Nu heb ik in het
resulterend tekstbestand 988 lijnen, dus zestien meer dan de bedoeling
was. Er staan geen lege interlinies.
131_02_RO_1_1A_POOT 0 305.14089460960304
359.5485848841854 1326.822185789753
131_02_RO_1_1A_POOT is de naam van dat bestand, ik heb er in de gehele
file dus een paar dubbel. Heeft iemand van jullie een idee hoe ik dat
kan terug vinden zonder elke naam te moeten copiëren in een
zoek-venstertje, dat zou even omslachtig zijn als het werk tot hiertoe,
en geloof me...
Ik weet dat er voor Unix/Linux erg mooie commandline teksttools zijn,
maar ik ben het niet gewoon om hiermee te werken.
Eender welke tip is welkom,
Jeroen
--
Ubuntu-NL mailing list
Info/Uitschrijven: https://lists.ubuntu.com/mailman/listinfo/ubuntu-nl
--
Ubuntu-NL mailing list
Ubuntu-NL-***@public.gmane.org
Info/Uitschrijven: https://lists.ubuntu.com/mailman/listinfo/ubuntu-nl
Jan Claeys
2010-06-07 19:21:04 UTC
Permalink
Op maandag 07-06-2010 om 10:07 uur [tijdzone +0200], schreef Jeroen
Post by Jeroen Hendrickx
Maar Tims voorstel hiervoor uniq te gebruiken was zo snel geklaard dat
ik de resultaten nog geen vijf minuten later kon doorsturen.
Mijn eerste idee was ook om tools à la sort en uniq te gebruiken, maar
het is (voor anderen die ooit hetzelfde probleem hebben) altijd leuk om
de oplossing voor een probleem ook op de lijst te zien... *hint* ;-)
--
Jan Claeys
--
Ubuntu-NL mailing list
Ubuntu-NL-***@public.gmane.org
Info/Uitschrijven: https://lists.ubuntu.com/mailman/listinfo/ubuntu-nl
Loading...