2016-11-08 1 views
1

저는 파이썬을 사용하여 텍스트 파일을 살펴보고 하위 문자열 "e-"가 포함 된 모든 문자열을 "0.0"으로 바꿉니다. 광고, 예를 들어 파이썬에서 특정 문자를 포함하는 문자열을 대체하는 방법은 무엇입니까?

:

0.46790 0.25440 3.5637e-0은 0.0082447 0.0016506 0.0010338 0.00067166 0.00018180 -99 0.0043598

"3.5637e-0"0.0으로 대체 될 것이다. "e-"를 둘러싼 숫자는 반드시 각 발생에 대해 동일하지는 않습니다.

with open(outputfile, "wt") as fout: 
    with open(datafile, "rt") as fin: 
     for line in fin: 
      fout.write(line.replace('- ', '-99 ')) 

답변

3

나는 그것을 "0.0"와 "전자"를 포함하는 모든 요소를 ​​교체 라인을 분리하고 다시 가입 것 : 그것은이 경우에 과잉있을 수 있지만

fout.write(' '.join(['0.0' if 'e-' in x else x for x in line.split(' ')])) 
0

:이 작업을 수행 - ("-99"로 대체됩니다 ""어디가),하지만 난뿐만 아니라, 다른 제안에 열려입니다

가능하다면, 나는 다음과 같은 코드를 수정하고 싶습니다 마지막 두 줄 앞에 다음 두 줄을 추가하십시오.

contents = [x.replace("e-", '0.0') for x in line.split()] 
fout.write(' '.join(contents) + '\n') 

어떤이가하는 것은 공간이 만나 모든 부분에서 replace 방법을 적용 할 때마다이 line을 분리한다는 것입니다. 여기서 우리는 replace이 우리가 찾고있는 하위 문자열이 문자열로 시작하지 않더라도 작동한다는 사실을 이용하고 있습니다. 선을 수정 한 후에 다시 스티치하고 줄 바꿈을 추가하여 파일에 씁니다.

0

당신은 또한, regular expression을 사용할 수 있습니다 .

import re 

fout.write(re.sub(r"[\d.]+e-\d+", "0.0", line)) 
1

나의 제안은 유사한 방식으로 정규 표현식 모듈을 사용하는 것입니다

import re 
import sys 

def process_file(src, dst=sys.stdout): 
    for line in src: 
     dst.write(re.sub("\d+\.\d+e\-\d+", "0.0", line)) 

def main(paths): 
    for path in paths: 
     with open(path, "rb") as fp: 
      process_file(fp) 

if __name__ == "__main__": 
    sys.exit(main(sys.argv[1:])) 

나는 다음과 같은 내용

0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 
0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 

프로그램을 실행으로 파일을 작성하는 경우 (example.py)를 다음과 같이 수정합니다.

$ python example.py test.txt test.txt 

나는 당신은 사용자의 특정 요구에 맞게 프로그램을 적용 할 수있는 다음과 같은 출력을

0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 

0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 

를 얻을.

관련 문제