2017-03-17 3 views
0

Ich habe versucht, ein Programm zu erstellen, das * oder entfernen würde! aus Zeilen, wenn sie mit den besagten Zeichen begonnen haben. Deshalb, so etwas wie:Entfernen von bestimmten Zeichen aus TXT in Python 3.5

*81 
!81 

Würde ändern:

81 
81 

Dies ist der Code, den ich ab jetzt bin mit:

input("Hello") 
with open("Test.txt",'r') as c: 
    lines = c.readlines() 
    c.close() 
with open("Test.txt",'w') as c: 
    c.truncate() 
    for line in lines: 
     if line.startswith("!") or line.startswith("*") == False: 
      c.write(line) 
     if line.startswith("!") or line.startswith("*") == True: 
      new_line = line.translate({ord(c): None for c in '* !'}) 
      print(new_line) 
      c.write(new_line) 

    c.close() 

jedoch nur die Sterne werden entfernt, was ist daran falsch?

Antwort

0

Ihre boolean Bedingungen nicht korrekt sind, müssen Sie den Test auf allen Bedingungen und verwenden and in diesem ersten if

if line.startswith("!") == False and line.startswith("*") == False: 
    ... 

oder besser noch, verwenden not

if not (line.startswith("!") or line.startswith("*")): 
    ... 

Und sogar noch besser Entnehmen Sie das Token, an dem Sie interessiert sind, und überprüfen Sie es anhand einer Ausschlussliste.

with open("Test.txt",'r') as c: 
    lines = c.readlines() 

with open("Test.txt",'w') as c: 
    for line in lines: 
     if line[0] in "*!": 
      line = line[1:] 
     c.write(line) 
0

Eine Lösung, die einen regulären Ausdruck Substitution verwendet:

import re 

with open("Test.txt",'r+') as c: 
     inp = c.read() 
     out = re.sub(r'^([\*!])(.*)', r'\2', inp, flags=re.MULTILINE) 
     c.seek(0) 
     c.write(out) 
     c.truncate() 

Hinweis vor dem regulären Ausdruck wird nur der führende ‚*‘ oder ersetzen ‚!‘. Somit Linien, die mit einer beliebigen Kombination der Zeichen wie

*!80 
!*80 
**80 

würde ersetzt durch

!80 
*80 
*80 

Um alle führenden zu ersetzen ‚*‘ und starten ‚!‘ Bei Zeilen, die mit den Zeichen beginnen, ändern Sie das Muster in

'^([\*!]+)(.*)' 
Verwandte Themen