open with 문을 사용하여 파일을 여는 방법
Python에서 파일 입출력을 어떻게 하는지 보고 있습니다.파일명과 파일내의 이름을 대조해 확인해, 파일내의 오카렌스에 텍스트를 추가하면서, 파일내의 이름 리스트(한줄에 1개)를 읽어내기 위해서, 이하의 코드를 작성했습니다.코드는 동작한다.더 잘 할 수 있을까?
제가 쓰고 싶었던 건with open(...
입력 파일과 출력 파일 모두에 대한 문장이지만 어떻게 같은 블록에 있는지 알 수 없기 때문에 임시 위치에 이름을 저장해야 합니다.
def filter(txt, oldfile, newfile):
'''\
Read a list of names from a file line by line into an output file.
If a line begins with a particular name, insert a string of text
after the name before appending the line to the output file.
'''
outfile = open(newfile, 'w')
with open(oldfile, 'r', encoding='utf-8') as infile:
for line in infile:
if line.startswith(txt):
line = line[0:len(txt)] + ' - Truly a great person!\n'
outfile.write(line)
outfile.close()
return # Do I gain anything by including this?
# input the name you want to check against
text = input('Please enter the name of a great person: ')
letsgo = filter(text,'Spanish', 'Spanish2')
Python은 여러 개를 넣을 수 있습니다.open()
단일한 진술with
쉼표로 구분합니다.코드는 다음과 같습니다.
def filter(txt, oldfile, newfile):
'''\
Read a list of names from a file line by line into an output file.
If a line begins with a particular name, insert a string of text
after the name before appending the line to the output file.
'''
with open(newfile, 'w') as outfile, open(oldfile, 'r', encoding='utf-8') as infile:
for line in infile:
if line.startswith(txt):
line = line[0:len(txt)] + ' - Truly a great person!\n'
outfile.write(line)
# input the name you want to check against
text = input('Please enter the name of a great person: ')
letsgo = filter(text,'Spanish', 'Spanish2')
그리고 당신은 아무것도 얻을 수 없어요.return
기능을 종료할 때 사용합니다.사용할 수 있습니다.return
(물론 값을 반환하는 함수의 경우 값을 반환하는 함수는 값을 반환하지 않고 종료됩니다.)return
반환할 값을 지정합니다).
복수 사용open()
아이템with
Python 2.5에서는 지원되지 않습니다.with
Python 2.6에 도입되었지만 Python 2.7 및 Python 3.1 이상에서 지원됩니다.
http://docs.python.org/reference/compound_stmts.html#the-with-statement http://docs.python.org/release/3.1/reference/compound_stmts.html#the-with-statement
Python 2.5, 2.6 또는 3.0에서 실행해야 하는 코드를 작성하는 경우,with
를 사용하거나 를 사용합니다.
이렇게 네스트된 블록을 사용합니다.
with open(newfile, 'w') as outfile:
with open(oldfile, 'r', encoding='utf-8') as infile:
# your logic goes right here
를 블록으로 묶을 수 있습니다.다음과 같이 합니다.
with open(newfile, 'w') as outfile:
with open(oldfile, 'r', encoding='utf-8') as infile:
for line in infile:
if line.startswith(txt):
line = line[0:len(txt)] + ' - Truly a great person!\n'
outfile.write(line)
이 버전은 고객님의 버전보다 우수합니다.outfile
코드가 예외가 발생하더라도 닫힙니다.물론 시도/마침내 그렇게 할 수 있지만with
올바른 방법이라고 생각합니다.
또는 방금 배운 것처럼 @steveha에서 설명한 바와 같이 스테이트먼트를 사용하여 여러 컨텍스트 매니저를 설정할 수 있습니다.그게 보금자리보다 더 나은 선택인 것 같아.
그리고 당신의 마지막 사소한 질문의 경우, 반환은 진정한 목적을 제공하지 않습니다.없애버리겠어요.
경우에 따라 다양한 양의 파일을 열고 각 파일을 동일하게 취급할 수 있습니다.contextlib
from contextlib import ExitStack
filenames = [file1.txt, file2.txt, file3.txt]
with open('outfile.txt', 'a') as outfile:
with ExitStack() as stack:
file_pointers = [stack.enter_context(open(file, 'r')) for file in filenames]
for fp in file_pointers:
outfile.write(fp.read())
언급URL : https://stackoverflow.com/questions/9282967/how-to-open-a-file-using-the-open-with-statement
'programing' 카테고리의 다른 글
CloudFlare 및 PHP를 통한 방문자 IP 주소 로깅 (0) | 2023.01.13 |
---|---|
Java의 공급업체 및 소비자 인터페이스를 사용하는 시기와 이유는 무엇입니까? (0) | 2023.01.13 |
마이그레이션 데이터를 MariaDB 데이터베이스로 가져올 수 없습니다. (0) | 2023.01.13 |
PHP로 URL이 존재하는지 확인하려면 어떻게 해야 하나요? (0) | 2023.01.13 |
MySQL에서 하나의 쿼리에서 값이 다른 여러 행을 업데이트합니다. (0) | 2023.01.13 |