일부 조건에 따라 텍스트 파일을 읽고 라인별로 데이터를 검색하고 라인의 일부 값을 변경하여 다른 파일에 다시 쓰고 있습니다. 새 파일에는 이전 행이 없어야합니다. 나는 다음을 시도했지만 효과가 없었다. 나는 아주 기본적인 것을 놓치고 있다고 생각한다.라인을 파이썬의 새 라인으로 바꾸기
솔루션 : C++에서 우리는 라인을 증가시킬 수 있지만 파이썬에서는 이것을 달성하는 방법을 모르겠습니다. 그래서 지금은 새로운 라인보다 오래된 라인을 쓰고 있습니다. 그러나 새 파일에서는 새 행만 원합니다.
예 :
M0 38 A 19 40 DATA2 L=4e-08 W=3e-07 nf=1 m=1 $X=170 $Y=140 $D=8
M0 VBN A 19 40 TEMP2 L=4e-08 W=3e-07 nf=1 m=1 $X=170 $Y=140 $D=8
난이 시도하는 코드 다음
def parsefile():
fp = open("File1", "rb+")
update_file = "File1" + "_update"
fp_latest = open(update_file, "wb+")
for line in fp:
if line.find("DATA1") == -1:
fp_latest.write(line)
if line.find("DATA1") != -1:
line = line.split()
pin_name = find_pin_order(line[1])
update_line = "DATA " + line[1] + " " + pin_name
fp_latest.write(update_line)
line = ''.join(line)
if line.find("DATA2") != -1:
line_data = line.split()
line_data[1] = "TEMP2"
line_data =' '.join(line_data)
fp_latest.write(line_data)
if line.find("DATA3") != -1:
line_data = line.split()
line_data[1] = "TEMP3"
line_data =' '.join(line_data)
fp_latest.write(line_data)
fp_latest.close()
fp.close()
그것은 당신이 파이썬에서 파일을 작업 할 때, 그것을 사용하는 것이 가장 좋습니다 있음을 주목할 필요가 [은'with' 문 (http://www.youtube.com/watch?v=lRaKmobSXF4). –
마찬가지로 문자열에 무언가가 존재하는지 확인하고 싶다면'line.find()'를 사용하는 대신'in line' 문자열을'if not "문자열을 사용하는 것이 가장 좋습니다. 또한 여기에 복사/붙여 넣기 코딩의 증상이 있습니다 - 당신은 약간 다른 변수로 여러 번 동일한 일을하고 있습니다 - 당신은 루프 및/또는 함수로 그 기능을 추출해야합니다. –
'if line.find ("DAT1")! = -1 :'- 정말로 "DATA1"이 아니라 "DAT1"이겠습니까? 왜 그냥'else :'를 사용하지 않는가? – Vicky