[PYTHON] 파일의 시작 부분에 write ()?
PYTHON파일의 시작 부분에 write ()?
나는 지금 이렇게하고 있지만 파일의 시작 부분에 쓰기를 원한다.
f = open('out.txt', 'a') # or 'w'?
f.write("string 1")
f.write("string 2")
f.write("string 3")
f.close()
out.txt의 내용은 다음과 같습니다.
string 3
string 2
string 1
그리고 (이 코드처럼) :
string 1
string 2
string 3
해결법
-
==============================
1.이 질문을보십시오. 거기에 몇 가지 솔루션이 있습니다.
이 질문을보십시오. 거기에 몇 가지 솔루션이 있습니다.
Daniel과 MAK가 제안한 것과 같은 방식으로 아마 갈 것입니다. 아마도 lil 클래스를 만들어서 좀 더 유연하고 명료하게 만들 수있을 것입니다.
class Prepender: def __init__(self, fname, mode='w'): self.__write_queue = [] self.__f = open(fname, mode) def write(self, s): self.__write_queue.insert(0, s) def close(self): self.__exit__(None, None, None) def __enter__(self): return self def __exit__(self, type, value, traceback): if self.__write_queue: self.__f.writelines(self.__write_queue) self.__f.close() with Prepender('test_d.out') as f: f.write('string 1\n') f.write('string 2\n') f.write('string 3\n')
-
==============================
2.각 쓰기 사이에 f.seek (0)을 던질 수도 있고 (또는 당신을 위해 그것을 수행하는 래퍼 함수를 작성), 그렇게하기위한 간단한 방법은 없습니다.
각 쓰기 사이에 f.seek (0)을 던질 수도 있고 (또는 당신을 위해 그것을 수행하는 래퍼 함수를 작성), 그렇게하기위한 간단한 방법은 없습니다.
편집 : f.flush () 넣어 경우에도이 작동하지 않습니다, 계속 덮어 씁니다. 쓰기를 대기열에 넣고 순서를 바꾸어야 할 수도 있습니다.
그래서 대신
f.write("string 1") f.write("string 2") f.write("string 3")
어쩌면 다음과 같이 할 수 있습니다.
writeList = [] writeList.append("string 1\n") writeList.append("string 2\n") writeList.append("string 3\n") writeList.reverse() f.writelines(writeList)
-
==============================
3.Daniel DiPaolo의 대답에 대해 자세히 설명합니다.
Daniel DiPaolo의 대답에 대해 자세히 설명합니다.
쓸 줄 모든 줄을 목록에 추가하기 만하면됩니다. 목록을 역순으로 만들고 내용을 파일에 씁니다.
f=open('output.txt','w') l=[] l.append("string 1") l.append("string 2") l.append("string 3") for line in l: f.write(line) f.close()
목록을 사용하고 역순으로 사용하는 대신 처음에 양키를 사용하고 줄을 추가 할 수도 있습니다.
-
==============================
4.kdtrv의 답변에 대한 변형입니다. 이 버전은 기존 파일 내용을 유지하고 라인 순서를 유지하는 write_lines 메소드를 제공합니다.
kdtrv의 답변에 대한 변형입니다. 이 버전은 기존 파일 내용을 유지하고 라인 순서를 유지하는 write_lines 메소드를 제공합니다.
class Prepender(object): def __init__(self, file_path, ): # Read in the existing file, so we can write it back later with open(file_path, mode='r') as f: self.__write_queue = f.readlines() self.__open_file = open(file_path, mode='w') def write_line(self, line): self.__write_queue.insert(0, "%s\n" % line, ) def write_lines(self, lines): lines.reverse() for line in lines: self.write_line(line) def close(self): self.__exit__(None, None, None) def __enter__(self): return self def __exit__(self, type, value, traceback): if self.__write_queue: self.__open_file.writelines(self.__write_queue) self.__open_file.close() with Prepender('test_d.out') as f: # Must write individual lines in reverse order f.write_line('This will be line 3') f.write_line('This will be line 2') f.write_line('This will be line 1') with Prepender('test_d.out') as f: # Or, use write_lines instead - that maintains order. f.write_lines( ['This will be line 1', 'This will be line 2', 'This will be line 3', ] )
from https://stackoverflow.com/questions/2677617/write-at-beginning-of-file by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] matplotlib로 플롯의 구석에 작은 이미지를 삽입하는 방법? (0) | 2018.11.23 |
---|---|
[PYTHON] 파이썬 : -u 옵션의 중요성? (0) | 2018.11.23 |
[PYTHON] 상위 폴더 하위 폴더에서 상대 가져 오기 모듈 (0) | 2018.11.23 |
[PYTHON] PyCharm에서 Django 테스트 실행하기 (0) | 2018.11.23 |
[PYTHON] Python - 두 개의 열 조합을 기반으로 데이터 프레임에서 중복을 삭제 하시겠습니까? (0) | 2018.11.23 |