답변:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
with open(file, "a")
방법을 사용하고 있음을 알았습니다 . 나는 구식이지만 어쩌면 장점은 무엇입니까open(file, "a") ... file.close()
print("appended text", file=myfile)
더 친숙한 API에 대해서도 가능합니다.
open()
하드 코딩하지 않습니다 utf-8
. 사용합니다 locale.getpreferredencoding(False)
. 패스 encoding="utf-8"
를 명시 적으로 알고 그 파일을 사용하는 UTF-8 인코딩을 매개 변수입니다.
"a"또는 "ab"를 모드로 설정하여 추가 모드에서 파일을 열어야합니다. open ()을 참조하십시오 .
"a"모드로 열면 쓰기 위치는 항상 파일의 끝에 있습니다 (첨부 파일). "a +"로 열면 읽을 수 있고 뒤로 탐색하고 읽을 수 있습니다 (그러나 모든 쓰기는 여전히 파일 끝에 있습니다!).
예:
>>> with open('test1','wb') as f:
f.write('test')
>>> with open('test1','ab') as f:
f.write('koko')
>>> with open('test1','rb') as f:
f.read()
'testkoko'
참고 : 'a'를 사용하는 것은 'w'로 열고 파일 끝을 찾는 것과 다릅니다. 다른 프로그램이 파일을 열고 찾기와 쓰기 사이에 쓰기를 시작하면 어떤 일이 발생할 수 있는지 고려하십시오. 일부 운영 체제에서 'a'를 사용하여 파일을 열면 다음 쓰기가 모두 파일 끝에 원자 적으로 추가됩니다 (파일이 다른 쓰기에 의해 증가하더라도).
"a"모드의 작동 방식에 대한 몇 가지 세부 사항 ( Linux에서만 테스트 됨 ). 다시 검색하더라도 모든 쓰기는 파일 끝에 추가됩니다.
>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'
실제로 fopen
맨 페이지 는 다음 과 같이 말합니다.
추가 모드 (파일의 첫 번째 문자)에서 파일을 열면이 스트림에 대한 모든 후속 쓰기 작업이 마치 호출 앞에 오는 것처럼 파일 끝에서 발생합니다.
fseek(stream, 0, SEEK_END);
with
)예 : ( 실제 프로그램 에서 파일을 닫는 데 사용with
- 설명서 참조 )
>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'
close()
?
with
- 볼 docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement
난 항상 이렇게 해요
f = open('filename.txt', 'a')
f.write("stuff")
f.close()
간단하지만 매우 유용합니다.
f
변수를 다른 함수에 전달하더라도 파일을 여는 동일한 함수가 변수를 닫아야합니다. with
구문은이를 달성하는 바람직한 방법이다.
아마도 "a"
모드 인수 로 전달하고 싶을 것입니다 . open ()에 대한 문서를 참조하십시오 .
with open("foo", "a") as f:
f.write("cool beans...")
업데이트 (+), 절단 (w) 및 이진 (b) 모드에 대한 모드 인수의 다른 순열이 있지만 시작하는 "a"
것이 가장 좋습니다.
file
내장 함수를 음영 처리합니다. 변수에는 사용하지 마십시오.
file
은 더 이상 Python 3에 내장되어 있지 않습니다. Python 2에서도 매우 드물게 사용됩니다 . 파일 열기는 일반적인 작업입니다. file
여기서는 파이썬 2와 3 모두에서 이름 을 사용 하는 것이 좋습니다.
파이썬은 주요 세 가지 모드 중에서 많은 변형이 있습니다.이 세 가지 모드는 다음과 같습니다.
'w' write text
'r' read text
'a' append text
따라서 파일에 추가하는 것은 다음과 같이 쉽습니다.
f = open('filename.txt', 'a')
f.write('whatever you want to write here (in append mode) here.')
그런 다음 코드를 더 적은 줄로 만드는 모드가 있습니다.
'r+' read + write text
'w+' read + write text
'a+' append + read text
마지막으로 이진 형식의 읽기 / 쓰기 모드가 있습니다.
'rb' read binary
'wb' write binary
'ab' append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
print
대신 다음과 write
같이 할 수도 있습니다 .
with open('test.txt', 'a') as f:
print('appended text', file=f)
경우 TEST.TXT가 존재하지 않는, 그것은 생성됩니다 ...
WRITE_TO_FILE = open('my_file.txt', mode='a')
, 프로그램 동안 당신은 몇가지 같은 인쇄물을 가질 수 있으며 print('Hello world', file=WRITE_TO_FILE)
, 콘솔에서 출력을보기로 결정할 때마다 플래그를로 변경하십시오 WRITE_TO_FILE = None
. 파일이 없으면 파일을 닫는 것을 잊지 마십시오None
파일에 추가하려는 경우
with open("test.txt", "a") as myfile:
myfile.write("append me")
우리는 myfile
이라는 파일을 열 도록 변수 를 선언했습니다 test.txt
. Open은 우리가 열고 자하는 파일과 파일에 대해 수행하려는 권한 또는 작업의 종류를 나타내는 문자열 인 2 개의 인수를 취합니다.
파일 모드 옵션은 다음과 같습니다
모드 설명 'r'기본 모드입니다. 읽을 파일을 엽니 다. 'w'이 모드 쓰기 위해 파일을 엽니 다. 파일이 없으면 새 파일을 작성합니다. 파일이 있으면 파일을 자릅니다. 'x'새 파일을 만듭니다. 파일이 이미 존재하면 작업이 실패합니다. 'a'추가 모드에서 파일을 엽니 다. 파일이 없으면 새 파일을 작성합니다. 't'기본 모드입니다. 텍스트 모드로 열립니다. 'b'바이너리 모드로 열립니다. '+'읽기 및 쓰기 (업데이트)를위한 파일을 엽니 다.
이 'a'
매개 변수는 추가 모드를 나타냅니다. with open
매번 사용하고 싶지 않다면 쉽게 사용할 수있는 함수를 작성할 수 있습니다.
def append(txt='\nFunction Successfully Executed', file):
with open(file, 'a') as f:
f.write(txt)
끝이 아닌 다른 곳에 쓰려면 'r+'
† 을 사용할 수 있습니다 .
import os
with open(file, 'r+') as f:
f.seek(0, os.SEEK_END)
f.write("text to add")
마지막 'w+'
으로이 매개 변수는 더 많은 자유를 부여합니다. 특히, 파일이 존재하지 않는 경우 파일을 작성하고 현재 존재하는 파일의 내용을 비울 수 있습니다.
파일 끝에 더 많은 텍스트를 추가하는 가장 간단한 방법은 다음을 사용하는 것입니다.
with open('/path/to/file', 'a+') as file:
file.write("Additions to file")
file.close()
a+
의 open(...)
문에 지시는 추가 모드에서 파일을 열고 읽기 및 쓰기 액세스를 허용합니다.
또한 file.close()
파일을 사용한 후에는 연 파일을 모두 닫는 것이 좋습니다.
다음은 기본적으로 줄 수를 계산 한 다음 추가하고 다시 계산하여 작동 한 증거가있는 스크립트입니다.
shortPath = "../file_to_be_appended"
short = open(shortPath, 'r')
## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to"
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines initially" %(long_path,i)
long.close()
long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l:
try:
l = short.next() ## when you run out of lines, this breaks and the except statement is run
c += 1
long.write(l)
except:
l = None
long.close()
print "Done!, wrote %s lines" %c
## finally, count how many lines are left.
long = open(long_path, 'r')
for i,l in enumerate(long):
pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()