파일을 덮어쓰는 대신 파일에 어떻게 추가합니까? 파일에 추가하는 특수 기능이 있습니까?
질문자 :user502039
with open("test.txt", "a") as myfile: myfile.write("appended text")
Petter
"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
맨페이지 에는 다음과 같이 나와 있습니다.
추가 모드(a 모드의 첫 번째 문자)에서 파일을 열면 이 스트림에 대한 모든 후속 쓰기 작업이 호출 이전과 같이 파일 끝에서 발생합니다.
fseek(stream, 0, SEEK_END);
이전 단순화 답변( with
사용하지 않음):
예: ( 실제 프로그램에서 with
를 사용하여 파일을 닫습니다 - 설명서 참조)
>>> open("test","wb").write("test") >>> open("test","a+b").write("koko") >>> open("test","rb").read() 'testkoko'
sinelaw
나는 항상 이것을 하고,
f = open('filename.txt', 'a') f.write("stuff") f.close()
간단하지만 매우 유용합니다.
Seth Connell
Python에는 주요 세 가지 모드 외에도 많은 변형이 있으며 이 세 가지 모드는 다음과 같습니다.
'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
Cleve Green
모드 인수로 "a"
를 전달하고 싶을 것입니다. open() 문서를 참조하십시오.
with open("foo", "a") as f: f.write("cool beans...")
업데이트(+), 자르기(w) 및 이진(b) 모드에 대한 모드 인수의 다른 순열이 있지만 "a"
시작하는 것이 가장 좋습니다.
istruble
write
대신 print
할 수도 있습니다.
with open('test.txt', 'a') as f: print('appended text', file=f)
test.txt 가 없으면 생성됩니다...
Alaa M.
우리는이 라인을 사용하는 경우 open(filename, "a")
것으로, a
(가) 파일을 추가 나타냅니다, 그 수단은 기존 파일에 추가 데이터를 삽입 할 수 있습니다.
다음 줄을 사용하여 파일에 텍스트를 추가할 수 있습니다.
def FileSave(filename,content): with open(filename, "a") as myfile: myfile.write(content) FileSave("test.txt","test1 \n") FileSave("test.txt","test2 \n")
K.Suthagar
r+
모드에서 파일을 연 다음 파일 위치를 파일 끝으로 설정할 수도 있습니다.
import os with open('text.txt', 'r+') as f: f.seek(0, os.SEEK_END) f.write("text to add")
r+
모드에서 파일을 열면 끝 이외의 다른 파일 위치에 쓸 수 a
, a+
는 끝에 쓰기를 강제합니다.
Primusa
'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+'
매개변수는 더 많은 자유를 부여합니다. 특히, 존재하지 않는 경우 파일을 생성할 수 있을 뿐만 아니라 현재 존재하는 파일의 내용을 비울 수 있습니다.
Alec
파일에 추가하려는 경우
with open("test.txt", "a") as myfile: myfile.write("append me")
test.txt
라는 파일을 열기 위해 myfile
변수를 선언했습니다. Open은 2개의 인수를 취합니다. 열려는 파일과 파일에 대해 수행하려는 권한 또는 작업의 종류를 나타내는 문자열입니다.
다음은 파일 모드 옵션입니다.
모드 설명 'r' 이것은 기본 모드입니다. 읽을 수 있도록 파일을 엽니다. 'w' 이 모드는 쓰기 위해 파일을 엽니다. 파일이 없으면 새 파일을 만듭니다. 파일이 있으면 파일을 자릅니다. 'x' 새 파일을 만듭니다. 파일이 이미 있으면 작업이 실패합니다. 'a' 추가 모드에서 파일을 엽니다. 파일이 없으면 새 파일을 만듭니다. '' 기본 모드입니다. 텍스트 모드에서 열립니다. 'b' 바이너리 모드에서 열립니다. '+' 읽기 및 쓰기(업데이트)를 위해 파일을 엽니다.
nima moradi
여러 프로세스가 파일에 쓰는 경우 추가 모드를 사용해야 합니다. 그렇지 않으면 데이터가 스크램블됩니다. 추가 모드는 작성자가 파일에서 자신의 위치가 어디에 있다고 생각하는지에 관계없이 운영 체제가 모든 쓰기를 파일 끝에 넣도록 합니다. 이것은 동일한 프로세스의 여러 인스턴스가 동일한 로그 파일에 쓰는 nginx 또는 apache와 같은 다중 프로세스 서비스의 일반적인 문제입니다. 구하려고 하면 어떻게 되는지 고려하고 다음과 같이 작성하십시오.
Example does not work well with multiple processes: f = open("logfile", "w"); f.seek(0, os.SEEK_END); f.write("data to write"); writer1: seek to end of file. position 1000 (for example) writer2: seek to end of file. position 1000 writer2: write data at position 1000 end of file is now 1000 + length of data. writer1: write data at position 1000 writer1's data overwrites writer2's data.
추가 모드를 사용하여 운영 체제는 파일 끝에 모든 쓰기를 배치합니다.
f = open("logfile", "a"); f.seek(0, os.SEEK_END); f.write("data to write");
대부분 추가는 "파일 열기, 파일을 연 후 한 번 파일 끝으로 이동"을 의미 하지 않습니다. 그것은 "열린 파일, 내가하는 모든 쓰기는 파일의 끝에있을 것입니다"를 의미합니다.
경고: 이 작업을 수행하려면 모든 기록을 한 번의 쓰기 호출로 한 번에 작성해야 합니다. 여러 쓰기 간에 데이터를 분할하면 다른 작성자가 사용자 사이에 쓰기를 가져오고 데이터를 조작할 수 있습니다.
Walt Howard
파일 끝에 더 많은 텍스트를 추가하는 가장 간단한 방법은 다음을 사용하는 것입니다.
with open('/path/to/file', 'a+') as file: file.write("Additions to file") file.close()
open(...)
a+
는 추가 모드에서 파일을 열도록 지시하고 읽기 및 쓰기 액세스를 허용합니다.
file.close()
를 사용하여 사용을 마친 후에 연 파일을 닫는 것도 항상 좋은 습관입니다.
mattc-7
다음은 기본적으로 줄 수를 계산한 다음 추가한 다음 다시 계산하여 효과가 있다는 증거가 되도록 하는 내 스크립트입니다.
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()
travelingbones
출처 : http:www.stackoverflow.com/questions/4706499/how-do-you-append-to-a-file
'etc. > StackOverFlow' 카테고리의 다른 글
사전에서 요소 삭제 (0) | 2022.01.02 |
---|---|
인증 에이전트에 대한 연결을 열 수 없습니다. (0) | 2022.01.02 |
디렉토리의 모든 코드 줄을 재귀적으로 어떻게 계산할 수 있습니까? (0) | 2022.01.02 |
Vim에서 대소문자를 구분하지 않는 검색을 수행하는 방법 (0) | 2022.01.02 |
Git에서 로컬 커밋 버리기 (0) | 2022.01.02 |