FraXinuS Skrevet 17. februar 2007 Skrevet 17. februar 2007 (endret) Jeg trenger en funskjon for å finne grepene i et gitartabulatur. Jeg har laget denne: import cPickle import time f = file("chordlist.pcl", 'rb') chords = cPickle.load(f) f.close() def find_chords(value): found = [] value = value.split('\n') i1 = 0 for line in value: line = line.split(' ') i2 = 0 for word in line: word = word.strip() if word in chords: line[i2] = '<a href="" onclick="return false" onmouseover="showToolTip(\''+word+'\')" onmouseout="hideToolTip()">' + word + '</a>' found.append(word) i2 += 1 value[i1] = ' '.join(line) i1 += 1 value = '\n'.join(value) value += '</pre>' for c in set(found): value += '\n<pre id="' + c + '" class="chordpopup">' + c + '\n<script type="text/javascript">displayChord(\'' + chords[c] + '\')</script></pre>' return value content = open("marit_larsen__come_closer.txt").read() time.clock() i = 0 while i != 10000: find_chords(content) i += 1 print time.clock() #tar ca 20 sek på min maskin. Den skal brukes til å merke av grepene slik at de blir linker på en webside. Det er ganske viktig at den er rask så jeg trenger tips til forbedringer eller andre måter å gjøre det på, slik at den blir raskere, uten at den hopper over for mange grep. Grep listen kan lastes ned her: http://files.myopera.com/Pitmairen/files/chordlist.pcl Det er en python pickle file(protocol 2) som inneholder en dictionary som er slik: {"grepnavn" : "fingersetting"} text liste http://files.myopera.com/Pitmairen/files/chordlist.txt En tab for testing: http://files.myopera.com/Pitmairen/files/m...come_closer.txt Endret 17. februar 2007 av FraXinuS
zeitgeist Skrevet 19. februar 2007 Skrevet 19. februar 2007 Jeg har kikket litt på dette, men uten å se lyset. Det er noe råttent med hele filformatet. Greit nok å identifisere grep som Cadd9, men hva med f.eks Em/D# ? Jeg tror rett og slett at jeg ville pre-prosessert (delvis manuelt?) fila og tagget alle grepene, f.eks <chord>Cadd9</chord>, <chord>Em</chord>/<chord>D#</chord> og gjort global search/replace.
FraXinuS Skrevet 19. februar 2007 Forfatter Skrevet 19. februar 2007 (endret) Å tagge grepene går jo, men da må jeg nesten lagre filene to ganger i tilfelle jeg skal bruke filene til noe annet enn html. men vet du om det er mulig å få til noe slikt som dette med re.sub: import re text = "fe ew few <chord>D</chord> efewf" chords = {"D" : "xx0323"} re.sub(r"<chord>(.*?)</chord>", r'<a href="' + chords[r'\1'] + r'">\1</a>' , text) Bruker man en streng så blir jo \1 byttet ut med gruppe 1, men er det mulig å få tak i den verdien på en måte og bruke den slik som eksempelet over? Men vurderer om jeg kanskje bare skal lage det i javascript istedet, så slipper jeg å gjøre det på serveren. edit: fant ut det med re.sub, kan bruke en funkson istedet for en streng. Endret 19. februar 2007 av FraXinuS
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå