텍스트 파일 중 특정 문자열 수정하는 방법 질문

조회수 1560회

안녕하세요 고수님들 우선, 제가 궁금한 것은 텍스트 파일에서 특정한 문자열을 수정해야 하는데 사용할 수 있는 적절한 기본 소스코드가 있을지 궁금합니다.

이미지

위의 사진은 텍스트 파일의 일부분을 캡쳐한 것인데, 여기 노란색 박스 안에 있는 각 V의 값들을 바꿔줘야 합니다.

f = open("/home/sjhyun960/RTN_Boram/testfile.printtr0", 'r')
datafile = f.read()
f.close()

data_List = datafile.splitlines() #리스트 구조로 변경하여 각 줄을 index에 저장

data_List_Last = data_List[-1] #마지막 index

final_data = data_List_Last.split() #마지막 index tab 분리

Last_transient_simulation = final_data[0] #각 값들 변수 선언
transient_time = final_data[1]
Vin = final_data[2]
Vout1 = final_data[3]
Vout2 = final_data[4]
Vout3 = final_data[5]
Vout4 = final_data[6]

위와 같은 코드를 실행시켜서 얻은 출력 결과 인데, 이미지

여기서 예를 들면, 처음 사진의 'V(in) = 1' 문자열에서 1 값을 바로 윗 사진의 해당하는

V(in)의 값인 2.0125e-01으로 수정해야하는 것입니다. 추가로 수정 후 자동으로 저장까지 할 수 있을까요??

조금 길었지만, 고수님들께서 도와주셨으면 합니다..!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 실행전 파일

    *.DC VGS 0 1.2 0.01
    
    .IC V(IN)=1
    .IC V(OUT1)=0
    .IC V(OUT2)=1
    .IC V(OUT3)=0
    .IC V(OUT4)=1
    
    *.tran 0.1n 70n
    .tran 0.1n 5n
    

    실행코드

    from parse import compile
    f = open('1.txt', 'r+')
    
    _dict = {'IN':'2.01235e-1', \
    'OUT1':'9.6849e-01',\
    'OUT2':'5.4019e-02',\
    'OUT3':'3.2711e-02',\
    'OUT4':'1.0327e+00'}
    
    _PATTERN = compile('.IC V({})={}')
    _FILELINE = []
    for i in f:
        _FILTER = _PATTERN.parse(i)
        if _FILTER is None:
            _FILELINE += [i]
        elif _FILTER[0] in _dict and _FILTER[1] != _dict[_FILTER[0]]:
            _FILELINE += ['.IC V(%s)=%s\n'%(_FILTER[0], _dict[_FILTER[0]])]
        else:
            _FILELINE += [i]
    
    
    f.seek(0)
    f.truncate()
    for i in _FILELINE:
        f.write(i)
    
    f.close()
    

    실행 후 파일

    *.DC VGS 0 1.2 0.01
    
    .IC V(IN)=2.01235e-1
    .IC V(OUT1)=9.6849e-01
    .IC V(OUT2)=5.4019e-02
    .IC V(OUT3)=3.2711e-02
    .IC V(OUT4)=1.0327e+00
    
    *.tran 0.1n 70n
    .tran 0.1n 5n
    

    파일 전체를 읽어 온 후 parse 라는 라이브러리 활용하여 *.IC V(*)=* 패턴매칭된

    부분만 수정하여 특정 변수에 추가하여

    마지막에 해당 파일을 전체 지우고 재 입력하는 형태입니다. :P

    정답은 아니지만 참고만 해주시면 감사하겠습니다

    • 정규식보다 간단해 보이네요. 간단한 것 파싱할 때 유용하겠어요. nowp 2020.4.2 12:09
    • 참고하는데 많은 도움이 됐어요! 감사합니다^^ 알 수 없는 사용자 2020.4.3 00:30

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)