Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jiří Kameník:5.11.2021 8:59

Ahoj, mám tady takovém Python script, který jsem zkopíroval z netu a funguje mi dobře.
Dělá přesně to co jsem po něm chtěl, najde a nahradí například tohle:

Zkusil jsem: Zkoušel jsem tohle:
(re.compile(r'<CIS­LO>(\d\d\d\d)</CIS­LO>'), '<CISLO>\\1</CIS­LO>'),
to prošlo, ale bezezměny, pochopitelně. Pak jsem zkoušel různě:
(re.compile(r'<CIS­LO>(\d\d\d\d)</CIS­LO>'), '<CISLO>\\1 // 1000</CISLO>'),
a různé další variace, ale nic mi neprošlo :(
Mohl bych požádat o pomoc zkušenější?
Moc Děkuji Ston3

Chci docílit:

import os, os.path, re

path = "/Users/mypath/testData"
myfiles = os.listdir(path)
# its much faster if you compile your regexes before you
# actually use them in a loop
REGEXES = [(re.compile(r'dog'), 'cat'),
          (re.compile(r'123'), '789')]
for f in myfiles:
    # split the filename and file extension for use in
    # renaming the output file
    file_name, file_extension = os.path.splitext(f)
    generated_output_file = file_name + "_regex" + file_extension

    # As l4mpi said ... if odt is zipped, you'd need to unzip it first
    # re.search is slower than a simple if statement
    if file_extension in ('.txt', '.doc', '.odt', '.htm', '.html'):

        # Declare input and output files, open them,
        # and start working on each line.
        input_file = os.path.join(path, f)
        output_file = os.path.join(path, generated_output_file)

        with open(input_file, "r") as fi, open(output_file, "w") as fo:
            for line in fi:
                for search, replace in REGEXES:
                    line = search.sub(replace, line)
                fo.write(line)
        # both the input and output files are closed automatically
        # after the with statement closes

(re.compile(r'dog'), 'cat'), ale já bych teď potřeboval aby mi například z "<CISLO>1000</CIS­LO>" udělal dělení tisícovkou a nahradil to za "<CISLO>1.000</CIS­LO>"
Šlo by to nějak zakomponovat do tohoto scriptu? Vůbec si s tím nevím rady.

 
Odpovědět
5.11.2021 8:59
Avatar
Odpovídá na Jiří Kameník
Jiří Kameník:5.11.2021 10:24

Tak už vyřešeno jinde.

(re.compile(r'<CISLO>(\d+)(\d{3})</CISLO>'), '<CISLO>\\1.\\2</CISLO>')

Přikládám ještě to na co jsem přišel sám :D

(re.compile(r'<CISLO>(\d)</CISLO>'),'<CISLO>0.00\\1</CISLO>'),
(re.compile(r'<CISLO>(\d\d)</CISLO>'),'<CISLO>0.0\\1</CISLO>'),
(re.compile(r'<CISLO>(\d\d\d)</CISLO>'),'<CISLO>0.\\1</CISLO>'),

Je to takový dělení tisícema posunutím desetiné čárky/tečky

 
Nahoru Odpovědět
5.11.2021 10:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.