2010-05-04 5 views
42

파이썬에서 지우고 싶은 텍스트 파일이 있습니다. 어떻게해야합니까?파이썬에서 텍스트 파일의 파일 내용을 지우는 방법은 무엇입니까?

+2

Python _and_ C++? 왜? 당신은 하나에서 그것을 할 수 있고 당신은 다른 사람에게서 그것을 할 수 있습니다 - 그러나 선택이 주어진다면 그것은 파이썬으로 훨씬 더 쉽게 될 것입니다. – wilhelmtell

+0

답변을 주신 분은 가능하지 않다고 말씀 하셨으며, 파이썬으로 쉽게 할 수있는 방법을 알려주시겠습니까? – Hick

답변

118

는 C++에서

f = open('file.txt', 'r+') 
f.truncate() 

을, 당신은 비슷한 사용할 수 있습니다.

+0

'#include '그리고'std :: ofstream ("file.txt"); Python만큼 짧습니다. :) – wilhelmtell

+4

쓰기가 가능하도록 파일을 열 때 기본적으로 기존 내용이 잘 리기 때문에 (C++ 및 Python에서 모두 작동하는 이유는 기본적으로). 그래서 정말 일종의 부작용이고, 따라서 불필요한 경우에도 명확성을 위해 truncate()를 명시 적으로 호출하는 것을 선호합니다. – rmeador

+6

+1 "이미 열린 파일 인 경우" – lajarre

0

텍스트 파일은 순차적이므로 텍스트 파일은 직접 지울 수 없습니다. 선택할 수있는 옵션은 다음과 같습니다.

  • 가장 일반적인 방법은 새 파일을 만드는 것입니다. 원본 파일을 읽고 지우려는 부분을 제외한 모든 부분을 새 파일에 씁니다. 모든 파일이 작성되면 이전 파일을 삭제하고 새 파일의 이름을 원래 이름으로 바꿉니다.
  • 앞으로 변경하려는 지점에서 전체 파일을 자르고 다시 쓸 수도 있습니다. 변경할 지점을 찾고 파일의 나머지 부분을 메모리로 읽습니다. 같은 지점으로 다시 검색하고, 파일을 자르고, 지울 부분이없는 내용을 다시 쓸 수 있습니다.
  • 또 다른 간단한 옵션은 동일한 길이의 다른 데이터로 데이터를 덮어 쓰는 것입니다. 이를 위해 정확한 위치를 찾고 새 데이터를 작성하십시오. 한계는 정확히 같은 길이를 가져야한다는 것입니다.

seek/truncate 기능/방법을 참조하여 위의 아이디어를 구현하십시오. 파이썬과 C 모두 이러한 기능을 가지고 있습니다.

+0

그냥 처음부터 전체 파일을 지우기를 원합니다 – Hick

+2

그런 다음 파일을 제거하십시오. 파이썬에서'os.remove' 또는'os.unlink'를 사용하거나 C에서'unlink'를 사용하십시오. 또 다른 옵션은 파일을 쓰기 위해 다시 열거 나'truncate'를 사용하는 것입니다. – nosklo

0

끝 부분을 지워야하는 경우가 아니면 내 처 파일에서 "지우기"할 수 없습니다. "비어있는"값을 덮어 쓰는 것에 만족하거나 관심있는 파일의 일부를 읽고 다른 파일에 쓰십시오. 이미 열려있는 파일이있는 경우

open('file.txt', 'w').close() 

또는 대안 : 파이썬에서

+0

ok 쓰레기 값을주지 않고 덮어 쓰는 법? 나는 9라는 문자열 길이가 있다고 가정하고 6이라는 문자열 길이로 겹쳐 쓰고있다. 3 쓰레기 값을 의미할까요? – Hick

+0

수정하십시오. 게다가 당신은 그 문자가 쓰레기라는 사실을 독자들에게 알아낼 수있는 방법이 있어야합니다. –

+0

사실 내 코드는 python과 C++ 사이에 있습니다. 그래서 만약 파일이 C++로 작성되고 파이썬으로 파일 쓰기가된다면 .. 파일이 모두 지워 져야 할 때 .. – Hick

6
open("filename","w").close() 
+0

완벽합니다. 정확히 mekasperasky가 찾고있는 것입니다! – Natim

1

프로그램 내에서 null로 파일 포인터를 지정하면 파일에 대한 참조가 제거됩니다. 파일은 아직 남아 있습니다. 제 생각에는 remove()의 기능이 stdio.h 인 것 같습니다. 파이썬에 대해서는 잘 모르겠습니다.

+1

또는 unistd.h에서 unlink()를 사용하십시오. – Void

+2

BTW, remove() 및 unlink()는 일반 파일의 참조 횟수를 줄이고 실제로 삭제하지는 않습니다. 참조 횟수가 0이되면 파일이 지워집니다. 예를 들어 프로세스에 파일이 열려 있고 unlink() 또는 remove()를 호출하면 파일이 close() d가 될 때까지 삭제되지 않습니다 (즉, 참조 횟수가 0으로 떨어짐 - 다른 프로세스가 없다고 가정) 파일을 열어 두십시오). 이 동작은 예를 들어 비정상적인 프로세스 종료 (예 : open(), unlink(), 파일 IO 수행, ** CRASH **, close() NOT 호출) 후에 임시 파일이 남지 않도록하는 데 유용합니다. – Void

6

파일을 덮어 써야합니다. C++에서 :

#include <fstream> 

std::ofstream("test.txt", std::ios::out).close(); 
+0

이것은 C++에 유용합니다 :) – Natim

+1

'close()'호출이 필요 없습니다. 소멸자가 파일을 닫습니다. 그래서 임시 파일을 만들어야합니다 : ofstream ("test.txt");' – wilhelmtell

+0

파이썬과 C++에서 원래의 질문에 대해 물어볼 때까지 나는 혼란스러워했습니다. – user1717828

21

온 드라의 대답

하지 완전한 대답 확장을 더 truncate() (내 선호하는 방법)를 사용하여 커서를 원하는 위치에 있는지 확인합니다. 새 파일을 열어 읽을 때 - open('FILE_NAME','r') 커서는 기본적으로 0입니다. 코드에서 파일을 구문 분석 한 경우 파일 시작 부분을 다시 가리켜 야합니다. 즉 truncate(0) 기본적으로 truncate()은 현재 cusror 위치에서 시작하여 파일의 내용을 잘라냅니다.사용자의

A simple example

3

open("filename","w").close()의 또 다른 형태는

with open('filename.txt','w'): pass 
1

with open("myfile.txt", "r+") as my_file:를 사용하여, 내가 먼저 파일을 읽고있다, 특히 이후 myfile.txt에 이상한 0을 얻을 수있다 @jamylak. 작동하려면 우선 포인터 을 my_file.seek(0)과 함께 파일의 시작 부분으로 변경해야했습니다. 그런 다음 my_file.truncate()을 수행하여 파일을 지울 수있었습니다.

관련 문제