텍스트 파일 중 특정 문자열 수정하는 방법 질문
조회수 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
댓글 입력