07장. File(파일)

2019-11-01 22:33:21.0 조회수 : 172

File(파일)

고집

지금까지, 우리는 프로그램을 작성하고 우리의 의도를 전달하는 방법을 배웠습니다 중앙 처리 장치 조건부 실행, 함수, 반복 사용. 우리는 생성하고 데이터 구조를 사용하는 방법을 배운 메인 메모리 . 우리의 소프트웨어가 작동하고 실행하는 곳 CPU와 메모리입니다. 모두가 "생각"이 발생하는 곳이다.

당신이 우리의 하드웨어 아키텍처 논의를 기억한다면 전원은 CPU 나 메인 메모리 중 하나가 삭제됩니다에 저장 아무것도 해제되면. 지금까지 그래서, 우리의 프로그램은 Python을 배울 수있는 일시적인 재미 운동이었다.

보조 메모리

보조 메모리

이 장에서 우리는 작업을 시작 보조 메모리 (또는 파일). 전원이 꺼져있을 때 차 메모리는 삭제되지 않습니다. 아니면 USB 플래시 드라이브의 경우, 우리는 우리의 프로그램에서 쓰기 데이터를 시스템에서 제거 할 수 있으며 다른 시스템으로 전송.

우리는 주로 우리가 텍스트 편집기에서 만든 것과 같은 읽기 및 쓰기 텍스트 파일에 초점을 맞출 것이다. 나중에 우리는 특별히 읽고 데이터베이스 소프트웨어를 통해 기록 할 수 있도록 설계 바이너리 파일입니다 데이터베이스 파일로 작업하는 방법을 볼 수 있습니다.

파일 열기

우리가 읽거나 (하드 드라이브에 말) 파일을 기록 할 때, 우리는 먼저해야한다 열고 파일을. 파일을 열면 각 파일에 대한 데이터가 저장되는 위치를 알고 운영 시스템과 통신한다. 파일을 열 때, 당신은 이름으로 파일을 찾아 파일이 존재 확인하기 위해 운영 체제를 요구하고있다. 이 예에서는 파일 열기 mbox.txt 당신이 파이썬을 시작할 때에 같은 폴더에 저장해야합니다. 당신은에서이 파일을 다운로드 할 수 있습니다 www.py4e.com/code3/mbox.txt을

>>> fhand = open('mbox.txt')
>>> print(fhand)
<_io.TextIOWrapper name='mbox.txt' mode='r' encoding='cp1252'>

(가)하면 open성공적으로 운영 체제는 우리에게 반환하는 파일 핸들을 . 파일 핸들은 파일에 포함 된 실제 데이터가 아니라 대신에 우리가 데이터를 읽는 데 사용할 수있는 "핸들"입니다. 요청 된 파일이 존재하는 경우 당신은 핸들을 부여하고 파일을 읽을 수있는 적절한 권한이 있습니다.

파일 핸들

파일 핸들

파일이 존재하지 않을 경우, open역 추적에 실패하고 파일의 내용을 액세스 할 수있는 핸들을받지 않습니다 :

>>> fhand = open('stuff.txt')
Traceback (most recent call last):
File "", line 1, in 
FileNotFoundError: [Errno 2] No such file or directory: 'stuff.txt'

나중에 우리가 사용 try하고 except우리는 존재하지 않는 파일을 열려고 상황에보다 적절하게 처리 할 수 있습니다.

텍스트 파일과 라인

텍스트 파일은 파이썬 문자열은 문자의 순서로 생각할 수 많은 같은 라인의 순서로 생각 될 수있다. 예를 들어,이 오픈 소스 프로젝트 개발 팀의 다양한 개인의 메일 활동을 기록하는 텍스트 파일의 예입니다 :

From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008
Return-Path: 
Date: Sat, 5 Jan 2008 09:12:18 -0500
To: source@collab.sakaiproject.org
From: stephen.marquard@uct.ac.za
Subject: [sakai] svn commit: r39772 - content/branches/
Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772
...

메일 상호 작용의 전체 파일에서 사용할 수 있습니다

www.py4e.com/code3/mbox.txt

및 파일의 단축 버전에서 사용할 수 있습니다

www.py4e.com/code3/mbox-short.txt

이 파일은 여러 메일 메시지를 포함하는 파일의 표준 형식입니다. 메시지의 일부 "에서"로 시작하는 줄은 "보낸 사람"메시지와 함께 시작 라인을 분리합니다. MBOX 형식에 대한 자세한 내용은 https://en.wikipedia.org/wiki/Mbox을 .

라인에 파일을 중단하려면라는 "라인의 끝」를 나타냅니다 특수 문자가 개행 문자를.

파이썬에서, 우리는 표현 개행 문자열 상수의 백 슬래시-N 등의 문자를. 이 두 글자처럼 보인다하더라도, 실제로는 하나의 문자입니다. 우리가 인터프리터에서 "물건"을 입력하여 변수를 볼 때, 그것은 미를 보여줍니다 \n문자열에 있지만, 우리가 사용할 때 print문자열을 보여주기 위해, 우리는 개행 문자가 두 행으로 나누어 문자열을 참조하십시오.

>>> stuff = 'Hello\nWorld!'
>>> stuff
'Hello\nWorld!'
>>> print(stuff)
Hello
World!
>>> stuff = 'X\nY'
>>> print(stuff)
X
Y
>>> len(stuff)
3

또한 문자열의 길이가 있음을 알 수 X\nY있습니다  개행 문자가 하나의 문자이기 때문에 문자.

우리는 파일의 라인을 볼 때, 우리는 할 필요가 상상 라인의 끝을 표시 각 라인의 끝에 줄 바꿈라는 특수 보이지 않는 문자가 있음.

그래서 개행 문자는 라인에 파일에 문자를 구분합니다.

파일 읽기

그동안 파일 핸들이 파일에 대한 데이터를 포함하지 않습니다, 구성하는 매우 쉽습니다 for을 통해 읽고 파일의 각 줄을 계산 루프 :

fhand = open('mbox-short.txt')
count = 0
for line in fhand:
    count = count + 1
print('Line Count:', count)

# Code: http://www.py4e.com/code3/open.py

우리는 우리의 순서로 파일 핸들을 사용할 수 있습니다 for루프. 우리의 for루프는 단순히 파일의 줄 수를 계산하고이를 출력합니다. 의 거친 번역 for영어로 루프는 "파일 핸들로 표시되는 파일의 각 라인은 하나를 추가한다 count변수입니다."

이유 open기능은 전체 파일을 읽을 수없는 파일이 몇 기가 바이트의 데이터와 상당히 클 수 있다는 점이다. open문은 파일의 크기에 관계없이 동일한 시간이 소요됩니다. for루프는 실제로 데이터가 파일에서 읽을 수됩니다.

파일이 사용하여 읽을 때 for이 방법으로 루프를, 파이썬은 개행 문자를 사용하여 별도의 줄에 파일의 데이터를 분할 처리한다. 파이썬 개행을 통해 각각의 라인을 판독하고, 마지막 문자와 개행 포함 line의 각 반복에 대한 가변 for루프.

때문에 for루프는 한 번에 하나 개의 데이터 행을 판독하고, 효율적으로 판독 및 데이터를 저장하는 메인 메모리 부족없이 대용량 파일의 라인을 카운트 할 수있다. 상기 프로그램은 각 라인이 판독 간주하고 폐기되기 때문에 매우 적은 메모리를 사용하여 모든 크기의 파일의 라인을 카운트 할 수있다.

당신이 파일이 메인 메모리의 크기에 비해 상대적으로 작은 알고 있다면, 당신은 사용하여 하나 개의 문자열로 전체 파일을 읽을 수있는 read파일 핸들에 방법을.

>>> fhand = open('mbox-short.txt')
>>> inp = fhand.read()
>>> print(len(inp))
94626
>>> print(inp[:20])
From stephen.marquar

이 예에서 파일의 전체 내용 (모든 94,626 자) MBOX-short.txt은 변수에 직접 읽습니다 inp우리는에 저장되어있는 문자열 데이터의 처음 20 개 문자를 인쇄 할 문자열 슬라이스를 사용 inp.

파일이 이러한 방식으로 읽을 때, 라인과 개행 문자를 모두 포함한 모든 문자는 변수에 하나의 큰 문자열입니다 inp의 출력을 저장하는 것이 좋습니다 read각각의 호출이 있기 때문에 변수로 read리소스를 소모 :

>>> fhand = open('mbox-short.txt')
>>> print(len(fhand.read()))
94626
>>> print(len(fhand.read()))
0

의 양식 기억 open파일 데이터가 컴퓨터의 메인 메모리에 편안하게 맞는 경우 기능은 사용되어야한다. 파일이 메인 메모리에 비해 너무 큰 경우, 당신은 사용 덩어리에서 파일을 읽을 수있는 프로그램 작성해야 for하거나 while루프를.

파일을 검색

당신이 파일의 데이터를 검색 할 때, 그것은 읽을 수있는 매우 일반적인 패턴은 라인의 대부분을 무시하고 단지 특정 조건을 만족 라인을 처리하는 파일을 통해입니다. 우리는 간단한 검색 메커니즘을 구축하는 문자열 방법으로 파일을 읽어 패턴을 결합 할 수 있습니다.

"보낸 사람 :"우리가 파일을 읽을 만 접두어로 시작 줄을 인쇄하고 싶었 예를 들어, 우리는 문자열 방법 사용할 수 startswith을 원하는 접두사 만 그 라인을 선택합니다 :

fhand = open('mbox-short.txt')
count = 0
for line in fhand:
    if line.startswith('From:'):
        print(line)

# Code: http://www.py4e.com/code3/search1.py

이 프로그램이 실행되면, 우리는 다음과 같은 출력을 얻을 :

From: stephen.marquard@uct.ac.za

From: louis@media.berkeley.edu

From: zqian@umich.edu

From: rjlowe@iupui.edu
...

우리가보고있는 유일한 라인 "에서 :"로 시작하는 것들이기 때문에 출력은 훌륭하지만 왜 우리는 빈 줄을보고있다? 이것은 그 보이지 않는 때문이다 개행 문자. 각 줄은 줄 바꿈으로 끝나는, 그래서 print문은 변수의 문자열 출력 라인 개행을 포함하고 print추가 또 다른 우리가 보는 이중 간격 효과의 결과로, 줄 바꿈을.

우리는 마지막 문자를 제외한 모든 인쇄 라인 슬라이스를 사용할 수 있지만 간단한 방법은 사용하는 것입니다 rstrip에 다음과 같이 문자열의 오른쪽에서 공백을 제거합니다 방법 :

fhand = open('mbox-short.txt')
for line in fhand:
    line = line.rstrip()
    if line.startswith('From:'):
        print(line)

# Code: http://www.py4e.com/code3/search2.py

이 프로그램이 실행되면, 우리는 다음과 같은 출력을 얻을 :

From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu
From: cwen@iupui.edu
...

파일 처리 프로그램은 더 복잡, 당신은 사용하여 검색 루프를 구성 할 수 있습니다 continue검색 루프의 기본 아이디어는 "흥미로운"선하고 효과적으로 "재미"줄을 건너 뛰는 찾고있는 것입니다. 우리는 흥미로운 라인을 찾을 때 그리고, 우리는 그 선이 뭔가.

우리는 다음과 같이 재미 라인을 건너 뛰는의 패턴을 따라 루프를 구성 할 수 있습니다 :

fhand = open('mbox-short.txt')
for line in fhand:
    line = line.rstrip()
    # Skip 'uninteresting lines'
    if not line.startswith('From:'):
        continue
    # Process our 'interesting' line
    print(line)

# Code: http://www.py4e.com/code3/search3.py

프로그램의 결과는 동일하다. 우리가 사용하는 생략하는 영어에서 재미 라인 "에서"로 시작하지 않는 것들이다 continue은 "흥미로운"라인의 경우 (즉, "보낸 사람 :"로 시작하는 사람들은) 우리는 그 라인에 대한 처리를 수행한다.

우리는 사용할 수있는 find검색 문자열 어디서든 라인입니다 라인을 찾아 텍스트 편집기 검색을 시뮬레이션하기 위해 문자열 방법. 이후 find다른 문자열 내에서 문자열의 발생에 대한 외모와 중 하나를 반환하는 문자열의 위치 또는 -1 문자열이 발견되지 않은 경우, 우리는 문자열을 포함하는 행을 표시하려면 다음 루프를 쓸 수 있습니다 " @ uct.ac.za " (즉, 그들은 남아프리카 공화국 케이프 타운 대학에서 온) :

fhand = open('mbox-short.txt')
for line in fhand:
    line = line.rstrip()
    if line.find('@uct.ac.za') == -1: continue
    print(line)

# Code: http://www.py4e.com/code3/search4.py

어느 다음과 같은 출력을 생성합니다 :

From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008
X-Authentication-Warning: set sender to stephen.marquard@uct.ac.za using -f
From: stephen.marquard@uct.ac.za
Author: stephen.marquard@uct.ac.za
From david.horwitz@uct.ac.za Fri Jan  4 07:02:32 2008
X-Authentication-Warning: set sender to david.horwitz@uct.ac.za using -f
From: david.horwitz@uct.ac.za
Author: david.horwitz@uct.ac.za
...

여기에서 우리는 또한의 계약 형태로 사용하는 if우리는이 어디다 문을 continue같은 줄에 if이것은 형태의 계약 if(가)처럼 기능 같은 continue다음 줄 들여 쓰기에 있었다.

사용자를시키는 것은 파일 이름을 선택

우리는 정말 우리의 파이썬 코드 우리가 다른 파일을 처리 할 때마다 편집하고 싶지 않아요. 이 파일 이름 문자열에게 그들이 파이썬 코드를 변경하지 않고 다른 파일에 대한 우리의 프로그램을 사용할 수 있도록 프로그램이 실행될 때마다 입력하도록 요청하는 더 유용 할 것이다.

이것은 사용하여 사용자로부터 파일 이름을 읽어해야 할 매우 간단합니다 input다음과 같습니다 :

fname = input('Enter the file name: ')
fhand = open(fname)
count = 0
for line in fhand:
    if line.startswith('Subject:'):
        count = count + 1
print('There were', count, 'subject lines in', fname)

# Code: http://www.py4e.com/code3/search6.py

우리는 사용자로부터 파일 이름을 읽고라는 변수에 배치 fname하고 해당 파일을 엽니 다. 이제 우리는 다른 파일에 반복적으로 프로그램을 실행할 수 있습니다.

python search6.py
Enter the file name: mbox.txt
There were 1797 subject lines in mbox.txt

python search6.py
Enter the file name: mbox-short.txt
There were 27 subject lines in mbox-short.txt

다음 섹션에서 엿 전에, 위의 프로그램을 살펴보고, 자신에게 물어 "어떤 것은 여기 가능성이 잘못 갈 수 있을까?" 또는 "우리의 사용자 친화적 인은 우리의 좋은 작은 프로그램이 비정상적으로 우리가 사용자의 눈에 그리 쿨하지 보이게 역 추적으로 종료 원인이 무엇을 할 수 있는가?"

사용 try, except,open

나는 슬쩍 말라고. 이것은 당신의 마지막 기회입니다.

어떤 파일 이름이 아닌 것을 우리의 사용자 유형의 경우?

python search6.py
Enter the file name: missing.txt
Traceback (most recent call last):
  File "search6.py", line 2, in 
    fhand = open(fname)
FileNotFoundError: [Errno 2] No such file or directory: 'missing.txt'

python search6.py
Enter the file name: na na boo boo
Traceback (most recent call last):
  File "search6.py", line 2, in 
    fhand = open(fname)
FileNotFoundError: [Errno 2] No such file or directory: 'na na boo boo'

웃지 않는다. 사용자는 결국 목적이나 악의적 인 의도로하거나, 그들이 당신의 프로그램을 중단 할 수있는 가능한 모든 일을 할 것입니다. 사실, 소프트웨어 개발 팀의 중요한 부분이라는 사람 또는 그룹입니다 품질 보증 누구의 매우 직업은 프로그래머가이 소프트웨어를 파괴하기 위해 가능한 미친 일을하는 것입니다 (짧은 또는 QA) 만들어진.

품질 보증 팀은 우리가 소프트웨어를 구입하거나 소프트웨어를 작성하는 우리의 급여를 지불 할 수있는 최종 사용자에게 프로그램을 제공하기 전에 프로그램의 결함을 발견 할 책임이있다. 그래서 QA 팀은 프로그래머의 가장 친한 친구입니다.

그래서 지금 우리가 프로그램의 결함을 볼 것을, 우리는 우아하게 사용하여 문제를 해결할 수 tryexcept구조. 우리는 가정 할 필요가 open호출이 실패하고이 때 복구 코드를 추가 할 수 있습니다 open다음과 같이 실패

fname = input('Enter the file name: ')
try:
    fhand = open(fname)
except:
    print('File cannot be opened:', fname)
    exit()
count = 0
for line in fhand:
    if line.startswith('Subject:'):
        count = count + 1
print('There were', count, 'subject lines in', fname)

# Code: http://www.py4e.com/code3/search7.py

exit기능 프로그램을 종료한다. 우리가 반환 결코 호출하는 기능입니다. 이제 우리의 사용자 (또는 QA 팀) 어리 석음 또는 잘못된 파일 이름의 종류, 우리는 "캐치"그들과 정상적으로 복구 할 때 :

python search7.py
Enter the file name: mbox.txt
There were 1797 subject lines in mbox.txt

python search7.py
Enter the file name: na na boo boo
File cannot be opened: na na boo boo

보호 open호출하는 것은의 적절한 사용의 좋은 예입니다 try및 except파이썬 프로그램이다. 우리가 "파이썬 방법"일을 할 때 우리는 용어 "파이썬"을 사용합니다. 우리는 위의 예제 파일을 열 수있는 파이썬 방법이라고 말할 수있다.

파이썬에서 숙련가되면, 당신은 "더 파이썬"하는 문제에 동일한 두 솔루션을 결정하기 위해 다른 파이썬 프로그래머와 재치에 관여 할 수 있습니다. 목표는 "더 파이썬은"프로그래밍 부품 설계 및 부품 예술이라는 개념을 캡처 할 수 있습니다. 우리는 항상 뭔가 일을 만들기에 관심이없는, 우리는 또한 우리의 솔루션은 우아하고 우리의 동료에 의해 우아한로 이해되어야합니다.

파일 작성

파일을 작성하려면, 당신은 두 번째 매개 변수로 모드 "w"로 열어야합니다 :

>>> fout = open('output.txt', 'w')
>>> print(fout)
<_io.TextIOWrapper name='output.txt' mode='w' encoding='cp1252'>

파일이 이미 존재하는 경우, 쓰기 모드로 열면 이전 데이터를 지우고 새로운 시작, 그래서 조심! 파일이 존재하지 않을 경우, 새가 생성됩니다.

write파일 핸들 객체의 방법은 기록 된 문자 수를 반환, 파일에 데이터를 저장합니다. 기본 쓰기 모드는 쓰기 (읽기) 문자열 텍스트입니다.

>>> line1 = "This here's the wattle,\n"
>>> fout.write(line1)
24

또, 파일 객체는 어디를 추적, 그래서 당신이 호출하면 write다시, 그것은 끝에 새 데이터를 추가합니다.

우리는 우리가 우리가 선을 종료 할 때 명시 적으로 개행 문자를 삽입하여 파일에 쓰기로 라인의 끝을 관리 할 수 있는지 확인해야합니다. print문은 자동으로 줄 바꿈을 추가,하지만 write방법은 자동으로 줄 바꿈을 추가하지 않습니다.

>>> line2 = 'the emblem of our land.\n'
>>> fout.write(line2)
24

당신이 작성이 완료되면, 당신은 전원이 꺼질 경우가 손실되지 않도록 데이터의 마지막 비트가 물리적으로 디스크에 기록되어 있는지 확인하기 위해 파일을 닫해야합니다.

>>> fout.close()

우리는 우리가뿐만 아니라 읽기 열고 파일을 닫을 수 있지만, 파이썬은 프로그램이 종료 될 때 열려있는 모든 파일이 닫혀 있는지 확인합니다 이후 우리는 단지 몇 개의 파일을 열 경우 우리는 작은 실수가 될 수 있습니다. 우리가 파일을 작성하는 때, 우리는 기회에 아무것도 남기지하기 위해 명시 적으로 파일을 닫으려면.

디버깅

당신이 읽고 파일을 작성하는 경우 공백 문제로 실행 할 수 있습니다. 이러한 오류는 공백, 탭, 개행 문자가 정상적으로 보이지 않기 때문에 디버깅하기 어려울 수 있습니다 :

>>> s = '1 2\t 3\n 4'
>>> print(s)
1 2  3
 4

내장 된 기능이 repr도움이 될 수 있습니다. 이 인수로 어떤 객체를 사용하여 객체의 문자열 표현을 반환합니다. 문자열의 경우, 백 슬래시 시퀀스와 공백 문자를 나타냅니다 :

>>> print(repr(s))
'1 2\t 3\n 4'

이것은 디버깅에 도움이 될 수 있습니다.

당신이로 실행할 수있는 또 하나 개의 문제는 서로 다른 시스템은 라인의 끝을 표시하기 위해 다른 문자를 사용한다는 것입니다. 일부 시스템은 줄 바꿈, 표현을 사용합니다 \n다른 사람들은 리턴 문자, 표현을 사용합니다 \r일부는 모두 사용합니다. 서로 다른 시스템간에 파일을 이동하면, 이러한 불일치 문제가 발생할 수 있습니다.

대부분의 시스템에서, 하나의 포맷에서 다른 변환하는 응용 프로그램이 있습니다. 당신은 그들을 찾을 (이 문제에 대한 자세한 내용)에서 할 수 wikipedia.org/wiki/Newline . 또는, 물론, 당신은 하나를 직접 작성할 수 있습니다.

용어 사전

잡기
사용하여 프로그램 종료에서 예외를 방지하기 위해 try와 except문을.
줄 바꿈
파일 및 문자열에 사용되는 특수 문자는 라인의 끝을 나타냅니다.
파이썬
파이썬에서 우아하게 작동하는 기술. "시도를 사용하고 제외하면입니다 파이썬 누락 된 파일을 복구하는 방법".
품질 보증
사람 또는 팀은 소프트웨어 제품의 전반적인 품질을 보장에 초점을 맞추었다. QA는 종종 제품을 테스트하고 제품이 출시되기 전에 문제를 식별에 참여하고있다.
텍스트 파일
문자의 순서는 하드 드라이브와 같은 영구 저장 장치에 저장된다.

연습 1 : 파일을 읽어 모든 대문자 파일 (라인으로 라인)의 내용을 인쇄하는 프로그램을 작성합니다. 다음과 같이 보일 것이다 프로그램을 실행 :

python shout.py
Enter a file name: mbox-short.txt
FROM STEPHEN.MARQUARD@UCT.AC.ZA SAT JAN  5 09:14:16 2008
RETURN-PATH: 
RECEIVED: FROM MURDER (MAIL.UMICH.EDU [141.211.14.90])
     BY FRANKENSTEIN.MAIL.UMICH.EDU (CYRUS V2.3.8) WITH LMTPA;
     SAT, 05 JAN 2008 09:14:16 -0500

당신은에서 파일을 다운로드 할 수 있습니다 www.py4e.com/code3/mbox-short.txt

연습 2 : 파일을 읽고 형태의 라인을 찾아 다음 파일 이름을 묻는 메시지, 그리고하는 프로그램을 작성 :

X-DSPAM-Confidence: 0.8475

당신은 "X-DSPAM-신뢰"로 시작하는 라인을 만날 때 라인의 부동 소수점 숫자를 추출하는 라인을 따로 잡아 당깁니다. 이 라인을 카운트하고이 라인에서 스팸 지수 값의 합계를 계산합니다. 당신이 파일의 끝에 도달하면, 평균 스팸 지수를 인쇄 할 수 있습니다.

Enter the file name: mbox.txt
Average spam confidence: 0.894128046745

Enter the file name: mbox-short.txt
Average spam confidence: 0.750718518519

온 파일 테스트 mbox.txt 및 MBOX-short.txt 파일을.

연습 3 : 프로그래머가 지루해하거나 약간의 재미를 갖고 싶어 때로는 때, 그들은 무해한 추가 부활절 달걀을 자신의 프로그램. 그것은 정확한 파일 이름에 사용자 유형 "NA는 우우 우우 노나"재미있는 메시지를 출력하도록 파일 이름을 입력하라는 메시지를 표시 프로그램을 수정합니다. 이 프로그램은 존재와 존재하지 않는 다른 모든 파일에 대해 정상적으로 작동합니다. 다음은 프로그램의 샘플 실행은 다음과 같습니다

python egg.py
Enter the file name: mbox.txt
There were 1797 subject lines in mbox.txt

python egg.py
Enter the file name: missing.tyxt
File cannot be opened: missing.tyxt

python egg.py
Enter the file name: na na boo boo
NA NA BOO BOO TO YOU - You have been punk'd!

우리는 당신의 프로그램에 부활절 달걀을 넣어 당신을 장려하지 않습니다; 이것은 단지 운동입니다.



Add comment