반응형

정규식

정규식은 문자열에 대해 다양한 유형의 작업을 수행하는 데 사용됩니다.

Python의 정규식은 패턴과 함수의 두 부분으로 구성됩니다. 정규식 패턴은 문자열 내에서 패턴을 검색하는 데 사용되는 반면 함수는 패턴에서 반환된 문자열에 대한 작업을 수행하는 데 사용됩니다.

Python에서 정규식을 사용하려면 re 모듈을 가져와야 합니다. 아주 간단한 정규식의 예를 살펴보겠습니다.

다음 스크립트는 "^p.*y$" 패턴을 사용하여 정규식을 만듭니다. 이 정규식은 문자 p로 시작하고 문자 y로 끝나는 모든 문자열과 일치합니다.

다음 스크립트에서 정규 표현식에 사용되는 함수는 match()로 문자열이 정규 표현식에 지정된 패턴과 일치하면 True를 반환합니다.

match 함수의 첫 번째 매개변수는 검색할 패턴이고 두 번째 매개변수는 패턴을 검색하려는 문자열입니다.

 

import re

 

pattern = '^p.*y$'

string_list = ["pathology", "biology", "geography", "psychology", "mathematics"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathology

psychology

 

메타 문자를 사용하여 패턴 지정

메타 문자는 정규식 패턴을 정의하는 데 사용되는 특수 문자입니다.

 

대괄호 []

대괄호는 문자열에서 여러 패턴을 검색할 때 사용합니다.

다음 스크립트의 패턴은 문자열의 아무 곳에나 문자 a 또는 b가 포함된 모든 문자열을 반환합니다.

 

import re

 

pattern = '.*[ab].*'

string_list = ["pathology", "biology", "geography", "psychology", "mathematics"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathology

biology

geography

mathematics

 

마침표

마침표는 특정 위치의 문자를 검색하는 데 사용됩니다.

다음 스크립트는 문자열에서 5개 이상의 문자가 있는 모든 문자열을 검색합니다.

 

import re

 

pattern = '.....'

string_list = ["pathology", "bio", "geography", "psychology", "mathematics", "nic"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathology

geography

psychology

mathematics

 

캐럿(^)과 달러($)

캐럿 기호는 문자열의 시작 부분에서 문자 또는 문자열을 검색하는 반면 달러 기호는 다른 문자열의 끝에서 문자 또는 문자열을 검색하는 데 사용됩니다.

예를 들어, 다음 스크립트의 정규식은 알파벳 p로 시작하고 그 뒤에 임의의 수의 문자(.*)가 오고 알파벳 y로 끝나는 모든 문자열을 반환합니다.

 

import re

 

pattern = '^p.*y$'

string_list = ["pathology", "bio", "geography", "psychology", "mathematics", "nic"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathology

psychology

 

더하기(+)

더하기 기호는 기호 왼쪽에서 하나 이상의 패턴 발생을 검색하는 데 사용됩니다. 예를 들어, 패턴 ".*og+y" y로 끝나고 문자 o를 포함하는 모든 문자열과 y앞에 g가 하나 이상 오는 패턴을 검색합니다.

 

import re

 

pattern = '.*og+y'

string_list = ["pathology", "bio", "geography", "psychology", "mathematics", "nic"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathology

psychology

 

물음표(?)

반면에 물음표 기호는 기호 오른쪽에서 하나 이상의 패턴 발생을 검색하는 데 사용됩니다.

 

import re

 

pattern = '.*at?h'

string_list = ["pathology", "bio", "geography", "psychology", "mathematics", "nic"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathology

mathemathics

 

변경(|) 및 그룹화()

변경 기호(|)는 둘 이상의 정규식 패턴 사이에 OR 조건을 지정하는 데 사용됩니다. 그룹화 기호()는 두 개 이상의 패턴을 그룹화하는 데 사용됩니다.

예를 들어 "(^p) | (.*s$)”는 문자 p로 시작하거나 문자 s로 끝나는 모든 문자열과 일치합니다.

 

import re

 

pattern = '(^p)|(.*s$)'

string_list = ["pathologggy", "bio", "geography", "psychology", "mathematics", "nic"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

pathologggy

psychology

mathematics

 

백슬래시

백슬래시는 일반적으로 패턴에서 메타 문자로 사용되는 특수 문자를 사용할 수 있도록 합니다.

예를 들어 문자열 내에서 점 기호를 검색하려면 \를 통해 검색할 수 있습니다. 예를 들어 다음 스크립트의 패턴은 "25."로 시작하는 모든 문자열을 반환합니다.

 

import re

 

pattern = '25\.+.*'

string_list = ["pathologggy", "25", "geography", "psychology", "mathematics", "25.34"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

25.34

 

특수 시퀀스

Python 정규 표현식에는 일부 특수 시퀀스도 포함되어 있습니다.

예를 들어, \A 패턴은 시작 부분에서 문자열을 검색합니다. 예를 들어, 다음 스크립트는 pat로 시작하는 문자열과 일치합니다.

 

import re

 

pattern = '\Aabc'

string_list = ["abcdef", "25", "xyzabcdef", "mathematics", "25.34"]

 

for str in string_list:

  result = re.match(pattern, str)

  if result:

    print(str)

 

Output:

abcdef

 

\d+ 연산자는 문자열 내의 모든 숫자를 검색합니다.

다음은 예입니다.

 

import re

 

pattern = '\d+'

str = "This is 10, he is 22"

 

result = re.findall(pattern, str)

print(result)

 

Output:

[‘10’, ‘22’]

 

대문자 D가 있는 \D+ 시퀀스는 숫자를 제외한 문자열의 모든 단어를 반환합니다. 다음 예를 보십시오.

 

import re

 

pattern = '\D+'

str = "This is 10, he is 22"

 

result = re.findall(pattern, str)

print(result)

 

Output:

['This is ', ', he is ']

 

\w+ 시퀀스는 문자열 내의 특수 문자를 제외한 모든 단어를 반환합니다.

 

import re

 

pattern = '\w+'

str = "This is 10% he is # 22"

 

result = re.findall(pattern, str)

print(result)

 

Output:

['This', 'is', '10', 'he', 'is', '22']

 

대문자 W가 있는 \W+는 문자열 내에서 특수 문자만 반환합니다.

 

import re

 

pattern = '\W+'

str = "This is 10% he is # 22"

 

result = re.findall(pattern, str)

print(result)

 

Output:

[' ', ' ', '% ', ' ', ' # ']

 

함수의 정규 표현식

findall() 함수

findall() 함수는 특정 패턴과 일치하는 문자열의 모든 단어를 일치시키고 반환합니다.

 

import re

 

pattern = '\d+'

str = "This is 10 he is 22 and the gate is 80"

 

result = re.findall(pattern, str)

print(result)

 

Output:

['10', '22', '80']

 

split() 함수

split() 함수는 정규 표현식과 일치하는 위치에서 문자열을 분할합니다.

예를 들어 다음 스크립트의 정규식은 숫자가 있는 문자열을 분할합니다.

 

import re

 

pattern = '\d+'

str = "This is 10 he is 22 and the gate is 80."

 

result = re.split(pattern, str)

print(result)

 

Output:

['This is ', ' he is ', ' and the gate is ', '.']

 

sub() subn() 함수

sub() 함수는 지정된 패턴과 일치하는 위치에서 문자열을 다른 문자열로 대체합니다.

예를 들어, 다음 스크립트는 문자열의 모든 숫자를 문자열 XX로 바꿉니다.

 

import re

 

pattern = '\d+'

str = "This is 10 he is 22 and the gate is 80."

 

result = re.sub(pattern, 'XX', str)

print(result)

 

Output:

This is XX he is XX and the gate is XX.

 

subn() 함수는 sub() 함수와 매우 유사합니다.

그러나 업데이트된 문자열 외에도 subn() 함수는 대체 횟수도 반환합니다.

예를 들어, 다음 스크립트에서 subn() 함수는 출력에 표시된 대로 세 번 대체합니다.

 

import re

 

pattern = '\d+'

str = "This is 10 he is 22 and the gate is 80."

 

result = re.subn(pattern, 'XX', str)

print(result)

 

Output:

(‘This is XX he is XX and the gate is XX.’, 3)

 

search()

search() 메서드는 문자열 내에서 패턴을 검색하고 처음 일치하는 패턴의 값과 인덱스를 반환합니다.

예를 들어 다음 스크립트는 문자열 내에서 숫자를 검색합니다. 첫 번째 숫자가 10이므로 해당 값, 10과 해당 인덱스(8-10)가 반환됩니다.

 

import re

 

pattern = '\d+'

str = "This is 10 he is 22 and the gate is 80."

 

result = re.search(pattern, str)

print(result)

 

Output:

<re.Match object; span=(8, 10), match='10'>

반응형
반응형

디렉토리

디렉토리는 각 파일의 형식이 다를 수 있는 파일 모음입니다. 파이썬은 프로그래머가 디렉토리 작업을 하는 데 도움이 되는 다양한 방법을 OS 모듈에 가지고 있습니다.

 

디렉토리 작업

현재 작업 디렉토리 확인하기

import os

cwd = os.getcwd()

print("Current Workking Directory:", cwd)

 

Output:

Current Workking Directory: /content

 

다음 스크립트는 현재 작업 디렉토리 아래 서브 디렉토리 생성하기

import os

os.mkdir("mysub")

print("Current Workking Directory:", cwd)

 

다음 스크립트는 서브 디렉토리 아래 서브 디렉토리 생성하기

import os

os.mkdir("mysub/mysub2")

 

다음 스크립트는 디렉토리를 제거하는 예제입니다.

import os

os.rmdir("mysub/mysub2")

 

다음 스크립트는 디렉토리 이름을 변경하는 예제입니다.

import os

os.rename("mysub", "newdir")

 

다음 스크립트는 디렉토리 내용을 확인하는 예제입니다.

import os

print(os.listdir("."))

 

디렉토리와 서브디렉토리 내용 확인하기

walk() 함수는 디렉토리 및 하위 디렉토리의 내용을 식별하는 데 사용됩니다.

os.walk(path, topdown=True, onerror=None, followlinks=False)

 

iterator 객체를 반환하고 for 루프를 사용하여 그 내용을 볼 수 있습니다.

경로: 디렉토리 경로

topdown = True이면 위에서 아래로 순회됩니다.

onerror = None이면 실행해야 하는 함수를 반환합니다.

Followlinks = True이면 표시된 대로 디렉토리를 방문합니다.

심볼릭 링크에 의해.

 

다음 스크립트는 현재 작업 디렉토리 및 관련 하위 디렉토리의 내용을 출력하는 예제입니다.

import os

for dirpath, dirnames, filenames in os.walk('.'):

  print("Current Directory Path:", dirpath)

  print("Directories:", dirnames)

  print("Files:", filenames)

  print()

 

파일에 관한 정보를 얻는 방법

OS 모듈 stat() 함수는 크기, 마지막 액세스 시간, 마지막 수정 시간 등과 같은 파일의 통계를 식별하는 데 사용됩니다.

stats = os.stat(“abc.txt”)

 

다음 표는 파일의 다른 매개변수와 그 매개변수에서 얻은 정보를 보여줍니다.

Parameters Information Obtained
st_mode Protection Bits.
st_dev Device.
st_ino Node Number.
st_uid User Id of Owner
st_nlink Number of Hard Links.
st_size Size of file in bytes.
st_gid Group-Id of Owner.
st_atime Time of Most Recent Access.
st_ctime Time of Most Recent Meta Data Change.
st_mtime Time of Most Recent Modification.

 

소켓을 통해 데이터 보내기 및 받기

같은 컴퓨터나 다른 컴퓨터에 있는 응용 프로그램에서 데이터를 보내고 받기 위해 소켓을 사용할 수 있습니다. 소켓은 IP 주소와 포트 번호의 조합으로 나타내는 경로를 의미합니다.

Python 스크립트를 사용하여 소켓을 통해 데이터를 보내거나 받을 수 있습니다.

서버 응용 프로그램은 특정 IP에 대한 클라이언트 요청을 수신하고 클라이언트가 서버에 연결할 때마다 데이터를 클라이언트에 보냅니다.

 

소켓을 통한 데이터 전송

서버를 생성하려면 소켓 모듈에서 Socket 클래스의 객체를 생성해야 합니다.

 

다음으로 소켓을 포트에 바인딩해야 합니다. 소켓을 포트에 바인딩한다는 것은 소켓이 해당 포트를 통해 데이터를 보내고 받는다는 것을 의미합니다.

소켓을 포트에 바인딩하려면 bind() 메서드를 호출해야 합니다. 첫 번째 매개변수는 요청을 수신하려는 시스템의 IP 주소입니다. 빈 문자열을 첫 번째 매개변수로 전달하면 시스템은 다른 IP의 요청을 처리합니다. 두 번째 매개변수는 소켓을 바인딩하려는 포트입니다.

 

다음으로 Socket 클래스 객체를 사용하여 listen() 메서드를 호출해야 합니다. listen 메서드는 대기열에 대한 연결 수를 지정합니다.

 

마지막으로 루프 내부의 소켓 객체에 대해 accept() 메서드를 호출해야 합니다. 루프 내에서 accept() 메서드를 호출하면 소켓이 일정한 수신 모드로 전환됩니다. 클라이언트가 서버에 연결을 시도할 때마다 accept() 메서드는 클라이언트 연결 및 주소를 반환합니다.

 

클라이언트에 데이터를 다시 보내려면 연결에서 send() 메서드를 호출하고 메서드 매개 변수로 클라이언트에 보내고 싶은 데이터를 전달해야 합니다.

 

다음 스크립트에서는 한 번에 5개의 연결이 대기열에 들어가고 그 이후에는 소켓에서 새 연결을 수락하지 않습니다. 스크립트를 실행하면 서버는 포트 5555에서 수신 대기를 시작합니다.

 

import socket

 

new_socket = socket.socket()

print("Socket successfully created")

port = 5555

 

new_socket.bind(('', port))

print("Socket connected to port %s"%(port))

 

new_socket.listen(5)

print("Server is listening to request")

 

while True:

  conn, clt_address = new_socket.accept()

  print('Received connection request from', clt_address)

  conn.send(b'Welcome to the server')

  conn.close()

 

소켓을 통해 데이터 수신

소켓을 통해 데이터를 수신하려면 다시 Socket 클래스 개체를 만들어야 합니다.

다음으로 서버의 IP 주소와 포트 번호로 connect() 메소드를 호출해야 합니다.

마지막으로 서버에서 데이터를 수신하려면 수신할 데이터의 바이트 수와 함께 recv() 메서드를 호출해야 합니다.

 

import socket

 

client_socket = socket.socket()

port = 5555

client_socket.connect(('127.0.0.1', port))

print(client_socket.recv(2048))

client_socket.close()

 

반응형
반응형

CSV 파일 읽기

Python에서 CSV 파일을 읽으려면 먼저 csv 모듈을 가져와야 합니다.

다음으로 open() 함수를 사용하여 CSV 파일을 열어야 합니다.

다음으로 CSV 모듈에서 reader() 함수를 호출하고 파일 객체를 전달해야 합니다.

reader() 메서드는 CSV 파일의 행에 해당하는 항목이 포함된 목록을 반환합니다. 그런 다음 목록 항목을 반복할 수 있습니다.

 

csvfile.csv 파일을 열어보면 다음과 같은 내용이 있습니다.

name,age,gender,city

jon,25,male,london

kim,29,female,korea

 

csvfile.csv 파일을 파이썬에서 열어보고 출력해 보겠습니다. 출력된 결과를 보면 각각의 라인별로 리스트 타입으로 출력됩니다.

 

import csv

 

with open("E:/Data/csvfile.csv", mode = 'r') as file_handle_csv:

  file_content = csv.reader(file_handle_csv)

  for row in file_content:

    print(row)

 

Output:

['name', 'age', 'gender', 'city']

['jon', '25', 'male', 'london']

['kim', '29', 'female', 'korea']

 

 

CSV 파일 쓰기

1.     CSV 파일을 작성하려면 먼저 항목이 CSV 파일의 열 헤더에 해당하는 목록을 만들어야 합니다.

2.     레코드의 경우 각 내부 목록이 CSV 행에 해당하고 항목이 열 값에 해당하는 목록을 만들어야 합니다.

3.     쓰기 모드로 CSV 파일을 열어야 합니다.

4.     파일 개체가 CSV 모듈에서 write() 메서드로 전달됩니다. write() 메서드는 라이터 객체를 반환합니다.

5.     마지막으로 헤더를 작성하려면 헤더 목록을 writerow() 함수에 전달합니다.

6.     행을 쓰려면 다음 스크립트와 같이 레코드 목록을 writerows() 메서드에 전달합니다.

 

import csv

 

headers = ['Name', 'Age', 'Gender', 'City']

records = [['nick', 29, 'male', 'lyon'],

           ['joseph', 30, 'male', 'manchester'],

           ['kim', 33, 'female', 'seoul']]

 

with open("csvfile2.csv", mode = 'w', newline = '') as file_handle_csv:

    csv_writer = csv.writer(file_handle_csv)

    csv_writer.writerow(headers)   # writing the header

    csv_writer.writerows(records)  # writing the rows

 

새로 생성된 csvfile2.cvs 파일을 열어보면 다음과 같은 내용이 추가되었습니다.

Name,Age,Gender,City

nick,29,male,lyon

joseph,30,male,manchester

kim,33,female,seoul

 

 

PDF 파일 작업

Python으로 PDF 파일을 읽고 쓰는 방법을 보여줍니다.

PDF 파일을 읽으려면 PyPDF2 모듈을 설치해야 합니다. 다음 pip 명령으로 그렇게 할 수 있습니다.

 

pip install PyPDF2

 

PDF 파일 읽기

PDF 파일을 읽으려면 먼저 바이너리 읽기 모드로 파일을 열어야 합니다.

다음으로, 파일 객체를 PyPDF2 모듈에서 PdfFileReader() 메서드로 전달해야 합니다. 그러면 PdfFileReader() 메서드에서 반환된 개체를 사용하여 PDF 파일을 읽을 수 있습니다.

 

아래와 같이 numPages 속성을 사용하여 PDF 문서의 페이지 수를 가져올 수 있습니다.

 

import PyPDF2

 

file_handle_pdf = open("pdffile2.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

print(pdf_object.numPages)

 

텍스트를 인쇄하려면 먼저 getPage() 메서드를 사용하여 페이지를 가져와야 합니다.

다음으로 페이지 개체를 사용하여 extractText() 메서드를 호출하여 페이지 텍스트를 가져올 수 있습니다.

 

다음 스크립트는 PDF 문서의 첫 페이지 텍스트를 출력합니다.

 

import PyPDF2

 

file_handle_pdf = open("pdffile.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

page_one = pdf_object.getPage(0)

print(page_one.extractText())

 

모든 페이지에서 텍스트를 인쇄하려면 모든 페이지를 반복하고 getPage 메소드를 사용하여 현재 페이지를 잡고 extractText() 함수를 사용하여 해당 텍스트를 인쇄하면 됩니다. 다음 스크립트는 PDF 문서의 모든 페이지에서 텍스트를 인쇄합니다.

 

import PyPDF2

 

file_handle_pdf = open("pdffile.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

 

for i in range(pdf_object.numPages):

  new_page = pdf_object.getPage(i)

  print(new_page.extractText())

 

PDF 파일 쓰기

Python으로 PDF 문서를 작성하는 것은 복잡합니다.

형식 제약으로 인해 PDF 문서에 텍스트 문자열을 직접 추가할 수 없습니다.

PDF 문서를 작성하는 한 가지 방법은 PDF 문서의 특정 페이지에서 텍스트를 가져온 다음 해당 텍스트를 새 PDF 문서에 추가하는 것입니다.

 

1.     PdfFileWriter 클래스의 개체를 만듭니다. 이 객체는 PDF 문서에 텍스트를 쓰는 데 사용됩니다.

2.     다음으로 my_text.pdf 클래스의 첫 번째 페이지를 얻습니다.

3.     PDF 작성자 객체를 사용하여 페이지를 추가하거나 작성하려면 작성자의 addPage() 메서드에 페이지를 전달해야 합니다.

4.     다음 단계는 작성하려는 파일을 open() 함수를 사용하여 여는 것입니다.

5.     마지막으로 open() 함수에 의해 반환된 파일 객체는 PDF 작성자 객체의 write() 메서드로 전달됩니다.

 

다음 스크립트는 pdf_file1.pdf 파일에서 첫 번째 페이지를 읽고 해당 페이지를 새로 생성된 pdf_file2.pdf 파일에 추가합니다.

 

import PyPDF2

 

pdf_writer = PyPDF2.PdfFileWriter()

 

file_handle_pdf = open("pdf_file1.pdf", "rb")

pdf_object = PyPDF2.PdfFileReader(file_handle_pdf)

page_one = pdf_object.getPage(0)

 

pdf_writer.addPage(page_one)

 

new_pdf_file = open("pdf_file2.pdf", "wb")

pdf_writer.write(new_pdf_file)

new_pdf_file.close()

 

반응형
반응형

파이썬 응용 프로그램을 개발하는데 있어서 다른 유형의 파일을 가져와야 하는 경우가 종종 있습니다.

예를 들어 스팸 이메일을 분류하는 자연어 처리 애플리케이션을 개발하는 경우 스팸 이메일이 포함된 텍스트 파일을 사용하여 분류기 모델을 훈련해야 할 수 있습니다.

또한 CSV 파일에서 데이터를 읽고 CSV 파일에 데이터를 써야 할 수도 있습니다.

마지막으로 플랫 파일에 데이터를 읽고 쓰는 것 외에도 소켓을 사용하여 네트워크를 통해 데이터를 보내고 받아야 할 수도 있습니다.

 

파일 임포트

Python에서 파일 작업을 위해서 파일을 열어야 하는데 이때 사용하는 함수가 open()입니다.

open() 함수는 두 가지 속성을 전달해야 합니다. 열려는 파일의 경로와 파일을 오픈 할 모드입니다.

 

다음 표는 다양한 유형의 모드 값을 보여줍니다.

 

모드 설명
r 오직 읽기모드로 파일을 엽니다.
r+ 읽고 쓰기 위해서 파일을 엽니다.
rb 바이너리 형식 파일을 읽습니다.
rb+ 바이너리 형식으로 읽고 쓰기 위해서 파일을 엽니다.
w 오직 쓰기 위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다.
wb 바이너리 형식으로 쓰기위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다.
wb+ 바이너리 형식으로 읽거나 쓰기 위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다.
a 파일의 끝에 내용을 추가하기 위해서 파일을 엽니다.
a+ 내용을 추가하고 읽을 수 있도록 파일을 엽니다.
ab 바이너리 형식으로 내용을 추가하기 위해서 파일을 엽니다.
ab+ 바이너리 형식으로 내용을 추가하고 읽을 수 있도록 파일을 엽니다.

 

다음 스크립트는 읽고 쓸 수 있는 간단한 텍스트 파일을 엽니다. open() 함수에 의해 반환된 객체 유형을 출력합니다. 파일에 따라 open() 함수는 파일에서 다양한 유형의 작업을 수행하는 데 사용할 수 있는 객체를 반환합니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

type(file_handle_text)

 

Output:

_io.TextIOWrapper

 

같은 방법으로 워드 파일과 pdf 파일을 열 수 있습니다.

file_handle_word = open("E:/Data/ex_text.doc", "r+")

type(file_handle_word)

 

Output:

_io.TextIOWrapper

 

file_handle_pdf = open("E:/Data/ex_text.pdf", "r+")

type(file_handle_pdf)

 

Output:

_io.TextIOWrapper

 

open()함수에서 리턴 된 파일 객체는 name, mode closed를 사용하여 경로 이름, 파일 모드 및 파일 닫힘 여부를 확인할 수 있습니다.

 

print(file_handle_pdf.name)

print(file_handle_pdf.mode)

print(file_handle_pdf.closed)

 

Output:

E:/Data/ex_text.pdf

r+

False

 

파일을 연 후에는 다른 응용 프로그램에서 액세스할 수 있도록 닫아야 합니다. 파일을 닫으려면 closed() 메서드를 호출해야 합니다.

 

file_handle_pdf.close()

print(file_handle_pdf.closed)

 

Output:

True

 

Text 파일 읽기

Python으로 텍스트 파일을 읽으려면 먼저 읽기 권한으로 파일을 연 다음 파일 핸들러 객체를 사용하여 read() 메서드를 호출해야 합니다.

 

ex_text.txt 파일을 열어보면 다음과 같습니다.

hello there

Welcome to Python.

You will learn Python.

 

다음 스크립트는 "ex_text.txt"라는 파일을 읽습니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

file_content = file_handle_text.read()

print(file_content)

 

출력은 파일에 세 줄의 텍스트가 포함되어 있음을 보여줍니다.

hello there

Welcome to Python.

You will learn Python.

 

전체 파일을 읽는 대신 파일을 부분적으로 읽을 수도 있습니다.

예를 들어, 텍스트 파일에서 특정 수의 문자를 읽으려면 아래와 같이 매개변수 값으로 문자 수를 read() 함수에 전달해야 합니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

file_content = file_handle_text.read(20)

print(file_content)

 

Output:

hello there

Welcome

 

마지막으로 readline() 함수를 사용하여 파일을 한 라인씩 읽을 수도 있습니다. 라인 읽기 함수는 모든 라인을 읽을 때까지 텍스트의 다음 줄을 반환하는 반복기입니다. 다음은 readline() 함수의 예입니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r+")

file_line1 = file_handle_text.readline()

file_line2 = file_handle_text.readline()

print(file_line1)

print(file_line2)

file_handle_text.close()

 

Output:

hello there

Welcome to Python.

 

명시적으로 close() 함수를 호출하지 않고도 파일을 열고, 일부 작업을 수행하고, 파일을 닫을 수 있는 특별한 코드가 있습니다.

with 키워드 open 함수 as 키워드 파일 개체 이름

with 블록 내에서 파일 개체 이름을 사용하여 파일에 대한 작업을 수행할 수 있습니다.

 

with open("E:/Data/ex_text.txt", "r+") as file_handle_text:

  file_content = file_handle_text.read()

  print(file_content)

 

Output:

hello there

Welcome to Python.

You will learn Python.

 

Text 파일 생성과 쓰기

텍스트 파일을 만들기 전에 기존 파일에 텍스트를 쓰는 방법을 알아보겠습니다.

기존 파일에 추가로 텍스트를 추가하려면 파일 오픈 모드를 'a'로 하고 파일을 열어야 합니다.

다음으로 기존 텍스트 끝에 텍스트를 작성하려면 write() 메서드를 호출하면 됩니다. 추가할 텍스트는 write() 메서드에 매개변수로 전달됩니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "a")

file_handle_text.write("This line is appended to the existing file.")

file_handle_text.close()

 

이제 ex_text.txt 파일의 내용을 출력하면 출력에 새로 추가된 행이 표시됩니다.

 

file_handle_text = open("E:/Data/ex_text.txt", "r")

file_content = file_handle_text.read()

print(file_content)

 

Output:

hello there

Welcome to Python.

You will learn Python.

This line is appended to the existing file.

 

마지막으로 새 파일을 생성하려면 파일 경로와 'w' 모드로 open 함수를 호출해야 합니다.

같은 이름의 파일이 존재하지 않으면 새로 파일을 생성하고 동일한 이름의 파일이 존재하면 파일 내용을 덮어씁니다.

 

file_handle_text = open("E:/Data/ex_text2.txt", "w")

file_handle_text.write("This line will overwrite the existing content or will be written in a new file.")

file_handle_text.close()

 

반응형

+ Recent posts