파이썬에서 텍스트 파일의 파일 내용을 지우는 방법은 무엇입니까?


140

파이썬에서 지우고 싶은 텍스트 파일이 있습니다. 어떻게합니까?


대답을 한 사람들은 불가능하다고 말했다.. 그래서 파이썬에서 쉽게 어떻게 할 수 있는지 알려주고 싶습니까?
Hick

답변:


280

파이썬에서 :

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

또는 이미 열린 파일이있는 경우 :

f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+

C ++에서는 비슷한 것을 사용할 수 있습니다.


#include<fstream>그리고 std::ofstream("file.txt");파이썬만큼 짧습니다. :)
wilhelmtell

8
이것이 작동하는 이유는 (C ++ 및 파이썬 모두에서) 쓰기 위해 파일을 열 때 기존 내용이 잘 리기 때문입니다. 따라서 실제로 부작용 일 수 있으므로 명확하지 않기 때문에 truncate ()를 명시 적으로 호출하는 것이 좋습니다.
rmeador

7
"r +"를 사용하여 파일을 연 경우 파일을 구문 분석 한 경우 truncate (0)을 사용하십시오. 위의 답변에 이것을 추가하여 완료하십시오!
Johan Engblom

3
f.seek (0)을 사용하여 포인터를 파일의 시작 부분으로 이동
Johan Engblom

나는 파일에 쓰는 것뿐만 아니라 읽고있었습니다. 대답은 완벽하게 파일을 자릅니다하지만 쓰기 뭔가 원하는 경우 다시 추가하는 것을 잊지 마세요에 조심 f.seek(0)f.truncate(0)다른 사용자가 파일의 시작 부분에 추가 이상한 \ x00부터이있을 것이다.
krishna chaitanya

29

온 드라의 답변에 대한 완전한 확장이 아닙니다

사용하는 경우 truncate()확인 (내 선호하는 방법)을 만든다 커서가 필요한 위치에있다. 읽기 위해 새 파일을 열면 open('FILE_NAME','r')커서는 기본적으로 0입니다. 당신은 당신의 코드 내에서 파일을 구문 분석 한 경우에, 다시 즉, 파일의 시작 부분에 포인트로 확인 truncate(0) 기본으로 truncate()자릅니다 현재 cusror 위치에서 시작하는 파일의 내용.

간단한 예


22

"쓰기"모드에서 파일을 열면 파일이 지워 지므로 특별히 쓸 필요는 없습니다.

open("filename", "w").close()

(파일이 자동으로 닫히는 타이밍은 구현에 따라 다를 수 있으므로 닫으십시오)


10

사용자로부터의 다른 형태 @jamylak open("filename","w").close()IS를

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

8

을 사용할 때 특히 파일을 먼저 읽은 이후 with open("myfile.txt", "r+") as my_file:에 이상한 0이 나타납니다 myfile.txt. 그것이 작동하려면 먼저 my_file파일의 시작 부분에 대한 포인터를 로 변경해야 했습니다 my_file.seek(0). 그런 다음 my_file.truncate()파일을 지우려면 할 수 있습니다.


1
이것은 놀라지 않을 것입니다. 3 년 전이 답변 에서 언급되었습니다 .
AMC

6

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

#include <fstream>

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

1
close()전화 할 필요가 없습니다 . 소멸자가 파일을 닫습니다. 따라서 다음과 같이 임시를 만들어야합니다.ofstream("test.txt");
wilhelmtell

이 질문은이 답변 이후로 변경되었습니다. 질문의 새로운 방향에 따라 질문을 삭제 하시겠습니까?
Seanny123

1

프로그램 내에서 파일 포인터를 null로 지정하면 파일에 대한 해당 참조가 제거됩니다. 파일이 아직 있습니다. 나는 remove()c 의 함수 stdio.h가 당신이 찾고 있는 것이라고 생각합니다 . 파이썬에 대해 확실하지 않습니다.


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

1

보안이 중요한 경우 파일을 쓰기 위해 다시 열고 닫는 것으로 충분하지 않습니다. 최소한 일부 정보는 여전히 저장 장치에 있으며 디스크 복구 유틸리티를 사용하여 찾을 수 있습니다.

예를 들어, 지우려는 파일에 프로덕션 비밀번호가 포함되어 있고 현재 작업이 완료된 후 즉시 삭제해야한다고 가정하십시오.

파일 사용이 끝나면 파일을 0으로 채우면 중요한 정보가 손상되지 않습니다.

최근 프로젝트에서 다음 코드를 사용했는데,이 코드는 작은 텍스트 파일에 적합합니다. 기존 내용을 0 행으로 덮어 씁니다.

import os

def destroy_password_file(password_filename):
    with open(password_filename) as password_file:
        text = password_file.read()
    lentext = len(text)
    zero_fill_line_length = 40
    zero_fill = ['0' * zero_fill_line_length
                      for _
                      in range(lentext // zero_fill_line_length + 1)]
    zero_fill = os.linesep.join(zero_fill)
    with open(password_filename, 'w') as password_file:
        password_file.write(zero_fill)

제로 채우기는 보안을 보장하지 않습니다. 당신이 정말로 걱정하는 경우, 당신은 제로 채우기에 가장 좋은 것 같은 전문 유틸리티를 사용하여 파일 슈레더 또는 CCleaner를을 드라이브에 '빈'공간을 깨끗하게 닦아.


0

끝을 지울 필요가 없으면 파일을 제자리에서 "삭제"할 수 없습니다. "빈"값을 덮어 쓴 내용이거나 관심있는 파일 부분을 읽고 다른 파일에 씁니다.


쓰레기 값을주지 않고 덮어 쓰는 방법은 무엇입니까? 나는 문자열 길이가 9라고 가정하고 문자열 길이가 6으로 덮어 쓰고 있다고 가정합니다. 그것은 3 개의 쓰레기 값 rt를 의미합니까?
Hick

옳은. 또한이 3 개의 문자가 쓰레기라는 사실을 모든 독자에게 식별 할 수있는 방법이 있어야합니다.
이그나시오 바스케스-아 브람스

사실 내 코드는 파이썬과 c ++ 사이에 있습니다. 따라서 파일 읽기가 C ++에서 이루어지고 파이썬에서 파일 쓰기가 이루어지면 파일을 지워야 할 때마다 ..
Hick

0

텍스트 파일은 순차적이므로 해당 데이터를 직접 지울 수 없습니다. 옵션은 다음과 같습니다.

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

위의 아이디어를 구현 하려면 seek/ truncatefunction / method를 보십시오 . 파이썬과 C 모두 그러한 기능을 가지고 있습니다.


나는 단지 처음부터 전체 파일을 지우고 싶다
Hick

2
그런 다음 파일을 제거하십시오. 파이썬이나 C 에서 사용 os.remove하거나 사용하십시오 . 다른 옵션은 파일을 쓰거나 열어서 쓰거나 사용하는 것 입니다. os.unlinkunlinktruncate
nosklo

0

파일 내용 쓰기 및 읽기

def writeTempFile(text = ''):
    filePath = "/temp/file1.txt"
    if not text:                      # If blank return file content
        f = open(filePath, "r")
        slug = f.read()
        return slug
    else:
        f = open(filePath, "a") # Create a blank file
        f.seek(0)  # sets  point at the beginning of the file
        f.truncate()  # Clear previous content
        f.write(text) # Write file
        f.close() # Close file
        return text

그것은 나를 위해 일했다


0

위의 답변 중 일부를 기반으로 이것을 사용할 수도 있습니다.

file = open('filename.txt', 'w')
file.write('')
file.close

물론 이것은 너무 많은 코드 줄이 필요하기 때문에 파일을 지우는 정말 나쁜 방법이지만,이 방법으로도 수행 할 수 있음을 보여주기 위해 이것을 작성했습니다.

행복한 코딩!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.