stringcsere és bővítés pythonban [megoldva]

Sziasztok.

Adott 232032313^23 db txt fájl, melyek elején van egy ilyen stringelrendezés:

\lnff elsoszo innen meg jon atobbiszoveg

Az elsoszo hossza változó lehet, a többi lényegtelen, ami jön.

Cserélendő az \lnff és az elsoszo oly módon, hogy még {} használat is van:

\letf{e}{lsoszo} innen meg jon atobbiszoveg

Erre megoldottam egy pitonkódot', ami itt van:


#!/usr/bin/python

def make_atiras(mondat):
    print len(mondat)
    atiras_mondat = '\letf{' + mondat[6:7] + '}{' +  mondat[8:len(mondat)]+ '}'
    return atiras_mondat

print(make_atiras('\lnff elsoszo'))

Kérdés:

ha a fájlokban egynél több sor van, de ez a fenti sorelőfordulás mindben csak egyszer áll fenn, hogyan tudom megkérni a pythont arra, hogy az aktuális könyvtárban az összes fájlon hajtsa ezt végre?

Hozzászólások

Ha a feladathoz választod az eszközt, akkor valami ilyesmi a megoldás:


#!/usr/bin/env bash 

for i in *.tex ; do
  sed -i 's/\\lnff\ \([[:alpha:]]\)\([[:alpha:]]*\)/\\letf{\1}{\2}/' "$i" 
done

Ha ragaszkodsz a Pythonhoz:

#!/usr/bin/env python3
import os
import sys
import re

def find_tex(folder):
    matches = []
    for root, dirnames, filenames in os.walk(folder):
        for filename in filenames:
            if filename.endswith('.tex'):
                matches.append(os.path.join(root, filename))

    return matches

def main(argv):
    if (len(argv) == 1):
        print("Directory name?")
        exit(1)
    else:
        folder = argv[1]
    p = re.compile(r'^\\lnff (?P<head>\w)(?P<tail>[\w]*)')
    files = find_tex(folder)
    for filename in files:
        with open(filename, 'r') as tex_file:
            lines = []
            for line in tex_file:
                lines.append(line)
        with open(filename, 'w') as tex_file:
            for line in lines:
                tex_file.write(p.sub(r'\\letf{\g<head>}{\g<tail>}', line))

if __name__ == '__main__':
    main(sys.argv)

Bár hozzáteszem, hogy Pythonul nem nagyon tudok. Tehát nem kizárt, hogy ez a megoldás sok sebből vérzik.

Köszönöm :)

Bár nagy kínnal némi geany editor közbeiktatásával (!) megoldottam a gondot, ilyen máskor is felléphet, úgyhogy használom a kódot. Baromira sajnálom, hogy a pythonnal kiskoromban nem foglalkoztam eleget!

egyébként hogy találtad ki, hogy a fájlok *tex-ek?

---------
Különben azért folyamodtam a pythonhoz, mert awk-ban elfelejtettem a split használatát. De legjobb a sed, ott meg a reguláris kifejezéseket felejtettem el.

Erre én is gondoltam, de az output fájl és az input fájl megegyezik. Mivel nem vagyok rutinos a Pythonban, így ez volt az egyszerűbb megoldás. De ha a helyben való szerkesztésere van egyszerű megoldás, akkor az érdekelne. Mondjuk egy átmeneti fájllal meg tudtam volna oldani, de arra tippeltem, hogy az input fájlok nem túl hosszúak, így nem sokat nyernék a dologgal.