2017-03-17 1 views
0

* 또는!를 제거하는 프로그램을 만들려고했습니다. 그들이 문자로 시작한다면 라인에서. 따라서, 뭔가 같은 :Python 3.5의 txt에서 특정 문자 제거

*81 
!81 

가로 변경됩니다 :

81 
81 

이 지금의로 사용하고 코드입니다 : 그러나

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() 

는 만 별이 될 것입니다 제거,이게 뭐가 잘못 되었 니? 귀하의 부울 조건이 올바르지 않은

답변

0

, 당신은 모든 조건에서 테스트를 필요로하고 더 나은 여전히 ​​not

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

를 사용하여 더 나은 아직 첫 if

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

또는에서 and을 사용하여 , 관심있는 토큰을 추출하고 제외 목록과 비교하십시오.

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

해결책 :

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() 

참고 위의 정규 표현식 교체에만 선두 '*'또는 '!'. 따라서, 라인

*!80 
!*80 
**80 

같은 문자의 조합으로 시작하는이 '*'모든 주요를 교체하려면

!80 
*80 
*80 

로 대체 될 것 '!' 문자로 시작하는 줄의 경우 패턴을

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