programing

open with 문을 사용하여 파일을 여는 방법

procenter 2023. 1. 13. 20:21
반응형

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()아이템withPython 2.5에서는 지원되지 않습니다.withPython 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

반응형