2017-03-20 9 views
1

제가 작업하고있는 Python 스크립트가 로컬 날씨 조건과 일부 네트워크 정보를 .bashrc 파일에 추가합니다. 모든 것은 두 가지 버그를 제외하면 예상대로 작동합니다. 이전 데이터를 제거하고 새 데이터를 추가하는 대신 다음과 같이 새 데이터를 추가합니다.Python3 - 파일에서 마지막 (n) 줄을 지우고 새 데이터를 추가하십시오.

('echo [로컬 날씨] :', 66.9, 'F' , 'with', 'cloud') ('에코 [귀하의 공용 IP 주소는 :],'xxxx '('에코 [현지 날씨] : ', 66.9,'F ','with ','흐린 구름 ') 는 ('에코 [내 공개 IP이다] ','XXXX ')

및 제 I 인쇄 된 텍스트에 서식을 드롭해야 예 (괄호, 쉼표 등) 때문에 문자열이 다음과 같이 표시됩니다.

에코 [로컬 날씨] : 흐린 구름 66.9F
에코 [공공 IP] : XXXX 여기

내 스크립트의 파일 작업 부분입니다

:

with open('HOME/.bashrc', 'a') as f: 
     w = "echo [Local weather]:", wx_t,"F", "with", wx_c 
     i = "echo [Your public IP is]:", ip 
     out = [str(w), str(i)] 
     f.write('\n'.join(out)[0:-3]) 

그래서 난 생각이 그 f.write('\n'.join(out)[0:-3]) 파일의 마지막 3 줄을 제거하지만 분명히 그것은 문자열의 마지막 3 문자를 삭제합니다. 내가 시도하는 것을 달성하기 위해 무엇을 바꾸어야합니까? f.write() 대신 f.writelines()을 사용해야합니까?

에 오신 것을 환영합니다 [호스트 이름] 당신은 사용자로 로그인 [some_user]
[현지 시간] : 2017 월 3월 20일 중부 서머 타임 08시 28분 32초

예상되는 결과는 결국 다음과 같이 표시됩니다 .
[로컬 날씨]으로 192.168.xx [공공 IP] : 맑은 하늘
[로컬 IP]와 66.56 F 미리와 XXXX

덕분에이 내가 apologiz 중복 질문 인 경우 이자형. 나는 해결책을 찾는데 나의 근면함을 느꼈지만 나는 실패했다.

UPDATE

: 그래서 제가

w = "echo [Local weather]: " + str(wx_t) + " F, with " + wx_c

w = "echo [Local weather]:", wx_t,"F", "with", wx_c

변경하여 서식 고정 f.writelines() 대신 f.write()을 사용. 또한 DeepSpace에서 제안한 f.close()를 제거했습니다.

+0

'on'을 사용하기 때문에'f.close()'를 호출 할 필요가 없습니다. – DeepSpace

+0

감사합니다. 나는 여전히 Python에 아주 익숙하지 않고 안전하게 플레이 할 것이라고 확신하지 못했습니다. –

답변

0

첫 번째 줄에는 'w' 대신 'a'을 사용하면 첫 번째 버그가 발생합니다. 이로 인해 파이썬은 파일을 덮어 쓰지 않고 파일에 추가합니다.

두 번째 버그는 모든 데이터를 문자열에 조인하고 [0:-3]out이 아닌 [0:-3]의 조인 된 문자열을 가져 오기 때문에 발생합니다.

귀하의 코드, 고정, 다음과 같이한다 : 펠릭스에

with open('HOME/.bashrc', 'w') as f: 
     w = "echo [Local weather]:", wx_t,"F", "with", wx_c 
     i = "echo [Your public IP is]:", ip 
     out = [str(w), str(i)] 
     f.write('\n'.join(out[0:-3])) 
0

덕분에 그의 제안을하지만 자신의 코드를 그대로 유지해야하는 파일의 부분을 삭제 구현. 이 링크를 찾은 후 "delete final line in text file with python" 해결책을 찾을 수 있었기 때문에이 질문을 게시하기 전에 더 연구해야한다고 생각합니다. 여기

예상대로 수행하는 고정 코드 :

out_file = (home+('/scripts/python/working/weather01')) 
rf = open(out_file, 'r') 
lines = rf.readlines() 
rf.close() 

f = open(out_file, 'w') 
f.writelines([item for item in lines[:-2]]) 

w = "echo [Local weather]: " + str(wx_t) + " F, with " + str(wx_c) 
i = "echo [Your public IP is]: " + ip 
out = [str(w), str(i)] 
f.writelines('\n'.join(out)) 
f.close() 

나는 누군가가 그 것이다 비판 관심 그래서 만약,이를 작성하는보다 효율적인 방법이 상상할 수있는 파이썬 꽤 새로 온 사람 때문에 굉장. 모두에게 감사드립니다!