2017-08-16 1 views
0

gibt es mehrere Dateien im Verzeichnis mit der Erweiterung .txt ersetzen, .dox, .qcr usw.Suche der Zeichenfolge Anzahl der TXT-Dateien in Python

ich brauche txt-Dateien auflisten, sucht & den Text ersetzen nur aus jeder txt-Datei.

müssen die $$ \ d suchen ... wo \ d steht für die Ziffer 1,2,3 ..... 100. muss mit xxx ersetzt werden.

Bitte lassen Sie mich das Python-Skript dafür wissen.

danke im voraus.

-Shrinivas

#created following script, it works for single txt files, but it is not working for txt files more than one lies in directory. -----

def replaceAll(file,searchExp,replaceExp): 
    for line in fileinput.input(file, inplace=1): 
     if searchExp in line: 
      line = line.replace(searchExp,replaceExp) 
     sys.stdout.write(line) 

#following code is not working, i expect to list out the files start #with "um_*.txt", open the file & replace the "$$\d" with replaceAll function. 

for um_file in glob.glob('*.txt'): 
    t = open(um_file, 'r') 
    replaceAll("t.read","$$\d","xxx") 
    t.close() 

Antwort

0

Probieren Sie es aus.

import re 
def replaceAll(file,searchExp,replaceExp): 
    for line in file.readlines(): 
     try: 
      line = line.replace(re.findall(searchExp,line)[0],replaceExp) 
     except: 
      pass 
     sys.stdout.write(line) 

#following code is not working, i expect to list out the files start #with "um_*.txt", open the file & replace the "$$\d" with replaceAll function. 

for um_file in glob.glob('*.txt'): 
    t = open(um_file, 'r') 
    replaceAll(t,"\d+","xxx") 
    t.close() 

Hier haben wir Datei-Handler auf die replaceAll Funktion anstatt eine Zeichenfolge senden.

+0

Hallo, danke, es nicht für jede Ziffer „\ d“ funktioniert ... Ich meine searchExp „$$ \ d“ nicht mit "ersetzt bekommen xxx ", derselbe Code funktioniert, wenn ich eine Ziffer verwende, sagen wir 1, dann replaceExp wird $$ 1. "\ d" ersetzt die Ziffer nicht global. – Shrinivas

+0

@Shrinivas Schau es dir an. –

0

fileinput.input(...) soll eine Reihe von Dateien verarbeiten, und muss mit einem entsprechenden fileinput.close() beendet werden. So können Sie entweder Prozess alle in einem einzigen Aufruf:

def replaceAll(file,searchExp,replaceExp): 
    for line in fileinput.input(file, inplace=True): 
     if searchExp in line: 
      line = line.replace(searchExp,replaceExp) 
     dummy = sys.stdout.write(line)  # to avoid a possible output of the size 
    fileinput.close()      # to orderly close everythin 


replaceAll(glob.glob('*.txt'), "$$\d","xxx") 

oder konsequent schließen fileinput nach jeder Datei verarbeiten, aber es ignoriert und nicht das Hauptmerkmal fileinput.

+0

Hallo, danke, es funktioniert nicht für eine Ziffer "\ d" ... ich meine searchExp "$$ \ d" wird nicht durch "xxx" ersetzt, der gleiche Code funktioniert, wenn ich eine Ziffer sage 1 , dann replaceExp wird $ 1. "\ d" ersetzt die Ziffer nicht global. – Shrinivas

+0

@Shrinivas: Sie müssen das RE-Modul verwenden, wenn Sie Regex ersetzen möchten. –

0

Sie können dies versuchen:

import os 
import re 

the_files = [i for i in os.listdir("foldername") if i.endswith("txt")] 

for file in the_files: 
    new_data = re.sub("\d+", "xxx", open(file).read()) 
    final_file = open(file, 'w') 
    final_file.write(new_data) 
    final_file.close() 
Verwandte Themen