본문 바로가기
파이썬

[파이썬 강좌] 13. 파일 처리

by GDBS 2020. 8. 30.
728x170

Python 자습서에서는 지난 자습서에서 Python 문자열 함수  대해 자세히 배웠습니다 .

Python은 파일에서 데이터를 읽고 파일에 데이터를 쓰는 중요한 기능을 제공합니다.

대부분 프로그래밍 언어에서 모든 값 또는 데이터는 본질적으로 휘발성 인 일부 변수에 저장됩니다.

데이터는 런타임 동안에 만 해당 변수에 저장되고 프로그램 실행이 완료되면 손실되기 때문입니다. 따라서 파일을 사용하여 이러한 데이터를 영구적으로 저장하는 것이 좋습니다.

 

 

 

파이썬이 파일을 처리하는 방법 ?

대량의 데이터를 처리하는 대규모 소프트웨어 응용 프로그램에서 작업하는 경우 변수가 본질적으로 휘발성이므로 해당 데이터가 변수에 저장 될 것으로 기대할 수 없습니다.

따라서 이러한 상황을 처리하려고 할 때 파일의 역할이 그림에 나타납니다.

파일은 본질적으로 비 휘발성이므로 데이터는 하드 디스크와 같은 보조 장치에 영구적으로 저장되며 python을 사용하여 응용 프로그램에서 이러한 파일을 처리합니다.

파이썬이 파일을 처리하는 방법에 대해 생각하고 있습니까?

일반 사람들이 파일을 처리하는 방법에 대한   살펴 보겠습니다 . 파일에서 데이터를 읽거나 파일에 데이터를 쓰려면 먼저 파일을 열거 나 파일이 없으면 새 파일을 만든 다음 정상적인 읽기 / 쓰기 작업을 수행합니다. , 파일을 저장하고 닫습니다.

비슷하게, 우리는 내장 된 메서드 나 함수를 사용하여 파이썬에서 동일한 작업을 수행합니다.

 

Python의 파일 유형

Python에는 두 가지 유형의 파일이 있으며 각 파일은 이해하기 쉽도록 예제와 함께 아래에 자세히 설명되어 있습니다.

그들은:

  • 바이너리 파일
  • 텍스트 파일

Python의 바이너리 파일

컴퓨터 시스템에서 볼 수있는 대부분의 파일을 바이너리 파일이라고합니다.

예:

  • 문서 파일 : .pdf, .doc, .xls 등
  • 이미지 파일 : .png, .jpg, .gif, .bmp 등
  • 비디오 파일 : .mp4, .3gp, .mkv, .avi 등
  • 오디오 파일 : .mp3, .wav, .mka, .aac 등
  • 데이터베이스 파일 : .mdb, .accde, .frm, .sqlite 등
  • 아카이브 파일 : .zip, .rar, .iso, .7z 등
  • 실행 파일 : .exe, .dll, .class 등

모든 바이너리 파일은 특정 형식을 따릅니다. 일반 텍스트 편집기에서 일부 바이너리 파일을 열 수 있지만 파일 안에있는 내용을 읽을 수 없습니다. 이는 모든 바이너리 파일이 컴퓨터 나 컴퓨터에서만 이해할 수있는 바이너리 형식으로 인코딩되기 때문입니다.

이러한 바이너리 파일을 처리하려면이를 열 수있는 특정 유형의 소프트웨어가 필요합니다.

예를 들어, .doc 바이너리 파일을 열려면 Microsoft Word 소프트웨어가 필요합니다. 마찬가지로 .pdf 바이너리 파일을 열려면 pdf 리더 소프트웨어가 필요하고 이미지 파일 등을 읽으려면 사진 편집기 소프트웨어가 필요합니다.

 

Python의 텍스트 파일

텍스트 파일에는 특정 인코딩이 없으며 일반 텍스트 편집기에서 열 수 있습니다.

예:

  • 웹 표준 : html, XML, CSS, JSON 등
  • 소스 코드 : c, app, js, py, java 등
  • 문서 : txt, tex, RTF 등
  • 테이블 형식 데이터 : csv, tsv 등
  • 구성 : ini, cfg, reg 등

이 튜토리얼에서는 몇 가지 고전적인 예제를 사용하여 텍스트와 바이너리 파일을 모두 처리하는 방법을 살펴 봅니다.

 

Python 파일 처리 작업

가장 중요한 것은 파일에 대해 Python이 처리 할 수있는 4 가지 유형의 작업입니다.

  • 열다
  • 읽다
  • 쓰다
  • 닫기

기타 작업은 다음과 같습니다.

  • 이름 바꾸기
  • 지우다

Python 파일 생성 및 열기

파이썬에는 파일을 여는 open ()이라는 내장 함수가 있습니다.

아래 구문에서 언급 한대로 최소한 하나의 인수를 사용합니다. open 메소드는 쓰기, 읽기 및 기타 내장 메소드에 액세스하는 데 사용되는 파일 객체를 반환합니다.

문법:

file_object = open (파일 _ 이름, 모드)

여기서 file_name은 파일 이름 또는 열려는 파일의 위치이며 file_name에는 파일 확장자도 포함되어야합니다. 이는 test.txt 에서 의미 합니다. test라는 용어는 파일의 이름이고 .txt는 파일의 확장자입니다.

열기 함수 구문의 모드는 파일에서 수행 할 작업을 Python에 알려줍니다.

  • 'r'– 읽기 모드 : 읽기 모드는 파일에서 데이터를 읽는 데만 사용됩니다.
  • 'w'– 쓰기 모드 : 이 모드는 파일에 데이터를 쓰거나 수정할 때 사용됩니다. 쓰기 모드는 파일에있는 데이터를 덮어 씁니다.
  • 'a'– 추가 모드 : 추가 모드는 파일에 데이터를 추가하는 데 사용됩니다. 데이터는 파일 포인터의 끝에 추가됩니다.
  • 'r +'– 읽기 또는 쓰기 모드 : 이 모드는 동일한 파일에서 데이터를 쓰거나 읽을 때 사용됩니다.
  • 'a +'– 추가 또는 읽기 모드 : 이 모드는 파일에서 데이터를 읽거나 동일한 파일에 데이터를 추가하려는 경우 사용됩니다.

참고 : 위에서 언급 한 모드는 텍스트 파일 열기, 읽기 또는 쓰기 전용입니다.

바이너리 파일을 사용하는 동안 우리는 끝에 문자 'b' 가있는 동일한 모드를 사용해야합니다 . 그래서 파이썬은 우리가 바이너리 파일과 상호 작용하고 있음을 이해할 수 있습니다.

  • 'wb'– 바이너리 형식의 쓰기 전용 모드로 파일을 엽니 다.
  • 'rb'– 바이너리 형식의 읽기 전용 모드로 파일을 엽니 다.
  • 'ab'– 바이너리 형식의 추가 전용 모드 파일을 엽니 다.
  • 'rb +'– 바이너리 형식의 읽기 및 쓰기 전용 모드로 파일을 엽니 다.
  • 'ab +'– 바이너리 형식의 추가 및 읽기 전용 모드를위한 파일을 엽니 다.

예 1 :

fo = open(“C:/Documents/Python/test.txt”, “r+”)

위의 예에서는 'C : / Documents / Python /'위치에있는 'test.txt'라는 파일을 열고 더 많은 유연성을 제공하는 읽기-쓰기 모드로 동일한 파일을 엽니 다.

예 2 :

fo = open(“C:/Documents/Python/img.bmp”, “rb+”)

위의 예에서는“C : / Documents / Python /”위치에있는 'img.bmp'라는 파일을 열고 있지만 여기서는 바이너리 파일을 열려고합니다.

파일에서 Python 읽기

파이썬으로 파일을 읽으려면 읽기 모드로 파일을 열어야합니다.

파이썬으로 파일을 읽을 수있는 세 가지 방법이 있습니다.

  • 읽기 ([n])
  • 리드 라인 ([n])
  • readlines ()

여기서 n은 읽을 바이트 수입니다.

먼저 아래와 같이 샘플 텍스트 파일을 만들어 보겠습니다.

이제 각 읽기 메서드가 수행하는 작업을 살펴 ​​보겠습니다.

예 1 :

my_file = open(“C:/Documents/Python/test.txt”, “r”)

print(my_file.read(5))

산출:

여보세요

여기서는 읽기 전용 모드로 test.txt 파일을 열고 my_file.read (5) 메서드를 사용하여 파일의 처음 5 자만 읽습니다.

산출:

예 2 :

my_file = open(“C:/Documents/Python/test.txt”, “r”)

print(my_file.read())

산출:

Hello World
Hello Python
좋은 아침

여기서 우리는 read () 함수 안에 어떤 인자도 제공하지 않았습니다. 따라서 파일 안에있는 모든 내용을 읽습니다.

산출:

예 3 :

my_file = open(“C:/Documents/Python/test.txt”, “r”)

print(my_file.readline(2))

산출:

이 함수는 다음 줄의 처음 2자를 반환합니다.

산출:

예 4 :

my_file = open(“C:/Documents/Python/test.txt”, “r”)

print(my_file.readline())

산출:

Hello World

이 함수를 사용하여 파일의 내용을 한 줄씩 읽을 수 있습니다.

산출:

예 5 :

my_file = open(“C:/Documents/Python/test.txt”, “r”)

print(my_file.readlines())

산출:

[ 'Hello World \ n', 'Hello Python \ n', 'Good Morning']

여기서는 개행 문자를 포함하여 텍스트 파일에있는 모든 행을 읽습니다.

산출:

이제 파일을 읽는 좀 더 실용적인 예를 살펴 보겠습니다.

 

 

파일에서 특정 줄 읽기

line_number = 4

fo = open(“C:/Documents/Python/test.txt”, ’r’)

currentline = 1

for line in fo:

           if(currentline == line_number):

                       print(line)

                       break

          currentline = currentline +1

산출:

어떻게 지내

위의 예에서는 "for loop"를 사용하여 'test.txt'파일에서 4 번째 줄만 읽으려고합니다 .

산출:

한 번에 전체 파일 읽기

filename = “C:/Documents/Python/test.txt”

filehandle = open(filename, ‘r’)

filedata = filehandle.read()

print(filedata)

산출:

세계 안녕하세요
안녕하세요 파이썬
좋은 아침
어떻게 당신입니다

산출:

 

파일에 Python 쓰기

파일에 데이터를 쓰려면 쓰기 모드에서 파일을 열어야합니다.

작성중인 파일에있는 내용을 덮어 쓰고 이전 데이터가 모두 지워 지므로 파일에 데이터를 쓰는 동안 매우주의해야합니다.

아래와 같이 파일에 데이터를 쓰는 두 가지 방법이 있습니다.

  • 쓰기 (문자열)
  • writelines (목록)

예 1 :

my_file = open(“C:/Documents/Python/test.txt”, “w”)

my_file.write(“Hello World”)

위 코드는 'test.txt'파일에 'Hello World'문자열을 씁니다.

test.txt 파일에 데이터를 쓰기 전에 :

산출:

예 2 :

my_file = open(“C:/Documents/Python/test.txt”, “w”)

my_file.write(“Hello World\n”)

my_file.write(“Hello Python”)

첫 번째 줄은 'Hello World'이고 \ n 문자를 언급했듯이 커서는 파일의 다음 줄로 이동 한 다음 'Hello Python'을 씁니다.

\ n 문자를 언급하지 않으면 데이터가 'Hello WorldHelloPython'과 같은 텍스트 파일에 계속 기록됩니다.

산출:

예 3 :

fruits = [“Apple\n”, “Orange\n”, “Grapes\n”, “Watermelon”]

my_file = open(“C:/Documents/Python/test.txt”, “w”)

my_file.writelines(fruits)

위의 코드는 동시에 'test.txt'파일 에 데이터 목록을 씁니다 .

산출:

 

Python 파일에 추가

데이터를 파일에 추가하려면 'a +'모드로 파일을 열어야합니다. 그래야 추가 및 쓰기 모드 모두에 액세스 할 수 있습니다.

예 1 :

my_file = open(“C:/Documents/Python/test.txt”, “a+”)

my_file.write (“Strawberry”)

위의 코드는 'test.txt'파일 끝에 'Apple'문자열을 추가 합니다.

산출:

예 2 :

my_file = open(“C:/Documents/Python/test.txt”, “a+”)

my_file.write (“\nGuava”)

위의 코드는 'test.txt'파일 끝에 새 줄 'Apple'문자열을 추가합니다 .

산출:

예 3 :

fruits = [“\nBanana”, “\nAvocado”, “\nFigs”, “\nMango”]

my_file = open(“C:/Documents/Python/test.txt”, “a+”)

my_file.writelines(fruits)

위의 코드 는 데이터 목록을 'test.txt'파일에 추가합니다.

산출:

예 4 :

text=["\nHello","\nHi","\nPython"]

my_file=open("C:/Documents/Python/test.txt",mode="a+")

my_file.writelines(text)

print("where the file cursor is:",my_file.tell())

my_file.seek(0)

for line in my_file:

      print(line)

위 코드에서 데이터 목록을 'test.txt'파일에 추가합니다. 여기에서 현재 커서가있는 위치를 인쇄하는 tell () 메서드를 사용했음을 알 수 있습니다.

seek (offset) : 오프셋은 0,1 및 2의 세 가지 유형의 인수를 사용
합니다. 오프셋이 0 인 경우 : 참조가 파일의 시작 부분을 가리 킵니다.
오프셋이 1 인 경우 현재 커서 위치를 기준으로합니다.
오프셋이 2 인 경우 참조가 파일의 끝을 가리 킵니다.

산출:

Python 닫기 파일

파일을 닫으려면 먼저 파일을 열어야합니다. 파이썬에는 열려있는 파일을 닫는 close ()라는 내장 메서드가 있습니다.

파일을 열 때마다 특히 쓰기 방법을 사용하여 파일을 닫는 것이 중요합니다. write 메서드 후에 close 함수를 호출하지 않으면 파일에 기록한 데이터가 파일에 저장되지 않기 때문입니다.

예 1 :

my_file = open(“C:/Documents/Python/test.txt”, “r”)

print(my_file.read())

my_file.close()

예 2 :

my_file = open(“C:/Documents/Python/test.txt”, “w”)

my_file.write(“Hello World”)

my_file.close()

Python 이름 바꾸기 또는 파일 삭제

Python은 파일 이름 변경 및 삭제와 같은 파일 작업을 수행하는 데 도움이되는 몇 가지 내장 메서드가있는 "os"모듈을 제공합니다.

이 모듈을 사용하려면 먼저 프로그램에서 "os"모듈을 가져온 다음 관련 메서드를 호출해야합니다.

rename () 메서드 :

이 rename () 메서드는 두 개의 인수, 즉 현재 파일 이름과 새 파일 이름을받습니다.

문법:

os.rename (현재 _ 파일 _ 이름, 새 _ 파일 _ 이름)

예 1 :

import os

os.rename(“test.txt”, “test1.txt”)

여기서 'test.txt'는 현재 파일 이름이고 'test1.txt'는 새 파일 이름입니다.

아래 예와 같이 위치를 지정할 수 있습니다.

예 2 :

import os

os.rename(“C:/Documents/Python/test.txt”, “C:/Documents/Python/test1.txt”)

파일 이름을 변경하기 전에 :

위 프로그램 실행 후

 

remove () 메서드

remove () 메서드를 사용하여 삭제할 파일 이름 또는 파일 위치를 제공하여 파일을 삭제합니다.

문법:

os.remove (파일 _ 이름)

예 1 :

import os

os.remove(“test.txt”)

여기서 'test.txt'는 제거하려는 파일입니다.

마찬가지로, 아래 예제와 같이 파일 위치도 인수에 전달할 수 있습니다.

예 2 :

import os

os.remove(“C:/Documents/Python/test.txt”)

 

파일 인코딩

파일 인코딩은 문자를 기계 만 이해할 수있는 특정 형식으로 변환하는 것을 나타냅니다.

다음과 같이 컴퓨터마다 인코딩 형식이 다릅니다.

  • Microsoft Windows OS는 기본적으로 'cp1252' 인코딩 형식을 사용합니다.
  • Linux 또는 Unix OS는 기본적으로 'utf-8' 인코딩 형식을 사용합니다.
  • Apple의 MAC OS는 기본적으로 'utf-8'또는 'utf-16' 인코딩 형식을 사용합니다.

몇 가지 예를 통해 인코딩 작업을 살펴 ​​보겠습니다.

예 1 :

my_file = open(“C:/Documents/Python/test.txt”, mode=”r”)

print(“Microsoft Windows encoding format by default is:”, my_file.encoding)

my_file.close()

산출:

기본적으로 Microsoft Windows 인코딩 형식은 cp1252입니다.

여기에서는 Windows 컴퓨터에서 프로그램을 실행 했으므로 기본 인코딩을 'cp1252'로 인쇄했습니다.

산출:

open 함수에 인수로 전달하여 파일의 인코딩 형식을 변경할 수도 있습니다.

예 2 :

my_file = open(“C:/Documents/Python/test.txt”, mode=”w”, encoding=”cp437”)

print(“File encoding format is:”, my_file.encoding)

my_file.close()

산출:

파일 인코딩 형식 : cp437

산출:

예 3 :

my_file = open(“C:/Documents/Python/test.txt”, mode=”w”, encoding=”utf-16”)

print(“File encoding format is:”, my_file.encoding)

my_file.close()

산출:

파일 인코딩 형식 : utf-16

산출:

 

이진 파일에서 데이터 쓰기 및 읽기

이진 파일은 기계가 이해할 수있는 이진 형식 (0과 1)으로 데이터를 저장합니다. 따라서 컴퓨터에서 이진 파일을 열면 데이터를 디코딩하고 사람이 읽을 수있는 형식으로 표시됩니다.

예:

# 바이너리 파일을 만들어 보겠습니다.

my_file = open(“C:/Documents/Python/bfile.bin”, “wb+”)

message = “Hello Python”

file_encode = message.encode(“ASCII”)

my_file.write(file_encode)

my_file.seek(0)

bdata = my_file.read()

print(“Binary Data:”, bdata)

ntext = bdata.decode(“ASCII”)

print(“Normal data:”, ntext)

위의 예에서 먼저 읽기 및 쓰기 권한이 있는 바이너리 파일 'bfile.bin'  만들고 파일 에 입력하려는 데이터는 쓰기 메서드를 호출하기 전에 인코딩해야합니다.

또한 데이터를 디코딩하지 않고 인쇄하여 데이터가 인코딩 될 때 파일 내부에서 정확히 어떻게 보이는지 관찰 할 수 있으며 동일한 데이터를 디코딩하여 사람이 읽을 수 있도록 인쇄합니다.

 

파일 I / O 속성

속성기술

이름 파일 이름 반환
양식 파일의 반환 모드
부호화 파일의 인코딩 형식을 반환합니다.
닫은 파일이 닫히면 true를 반환하고 그렇지 않으면 false를 반환합니다.

예:

my_file = open(“C:/Documents/Python/test.txt”, “a+”)

print(“What is the file name? ”, my_file.name)

print(“What is the file mode? ”, my_file.mode)

print(“What is the encoding format? ”, my_file.encoding)

print(“Is File closed? ”, my_file.closed)

my_file.close()

print(“Is File closed? ”, my_file.closed)

산출:

파일 이름은 무엇입니까? C : /Documents/Python/test.txt
파일 모드 란 무엇입니까? r
인코딩 형식은 무엇입니까? cp1252
파일이 닫혀 있습니까? False
파일이 닫혀 있습니까? 진실

산출:

파일의 다른 몇 가지 방법을 시도해 보겠습니다.

예:

my_file = open(“C:/Documents/Python/test.txt”, “w+”)

my_file.write(“Hello Python\nHello World\nGood Morning”)

my_file.seek(0)

print(my_file.read())

print(“Is file readable: ?”, my_file.readable())

print(“Is file writeable: ?”, my_file.writable())

print(“File no:”, my_file.fileno())

my_file.close()

산출:

Hello Python
Hello World
Good Morning
파일을 읽을 수 있습니까? True
파일 쓰기 가능 여부 :? 실제
파일 번호 : 3

산출:

 

Python 파일 메서드

함수설명

열다() 파일을 열려면
닫기() 열린 파일 닫기
파일 번호() 파일의 정수를 반환합니다.
읽기 (n) 파일 끝까지 파일에서 'n'문자를 읽습니다.
읽기 가능 () 파일을 읽을 수 있으면 true를 반환합니다.
readline () 파일에서 한 줄 읽기 및 반환
readlines () 파일에서 모든 줄을 읽고 반환합니다.
탐색 (오프셋) 오프셋에 지정된대로 바이트 단위로 커서 위치 변경
탐색 가능 () 파일이 임의 액세스를 지원하는 경우 true를 반환합니다.
텔() 현재 파일 위치를 반환합니다.
쓰기 가능 () 파일이 쓰기 가능한 경우 true를 반환합니다.
쓰다() 파일에 데이터 문자열을 씁니다.
writelines () 파일에 데이터 목록을 씁니다.

지금까지 엔드 엔드 프로그램에서 논의한 내용을 살펴 보겠습니다.

예:

my_file = open("C:/Documents/Python/test.txt", mode="w+")

print("What is the file name? ", my_file.name)

print("What is the mode of the file? ", my_file.mode)

print("What is the encoding format?", my_file.encoding)

 

text = ["Hello Python\n", "Good Morning\n", "Good Bye"]

my_file.writelines(text)

 

print("Size of the file is:", my_file.__sizeof__())

print("Cursor position is at byte:", my_file.tell())

my_file.seek(0)

print("Content of the file is:", my_file.read())

my_file.close()

 

file = open("C:/Documents/Python/test.txt", mode="r")

 

line_number = 3

current_line = 1

data = 0

for line in file:

if current_line == line_number:

data = line

print("Data present at current line is:", data)

break

current_line = current_line + 1

 

bin_file = open("C:/Documents/Python/bfile.exe", mode="wb+")

message_content = data.encode("utf-32")

bin_file.write(message_content)

bin_file.seek(0)

bdata = bin_file.read()

print("Binary Data is:", bdata)

ndata = bdata.decode("utf-32")

print("Normal Data is:", ndata)

file.close()

bin_file.close()

산출:

파일 이름은 무엇입니까? C : /Documents/Python/test.txt
파일의 모드는 무엇입니까? w +
인코딩 형식은 무엇입니까? cp1252
파일 크기 : 192
커서 위치가 바이트 : 36
파일 내용 : Hello Python
Good Morning
Good Bye
현재 줄에있는 데이터 : Good Bye
바이너리 데이터 : b '\ xff \ xfe \ x00 \ x00G \ x00 \ x00 \ x00o \ x00 \ x00 \ x00o \ x00 \ x00 \ x00d \ x00 \ x00 \ x00 \ x00 \ x00 \ x00B \ x00 \ x00 \ x00y \ x00 \ x00 \ x00e \ x00 \ x00 \ x00 ′
일반 데이터 : Good Bye

산출:

 

요약하면,

  • 일반적으로 데이터는 비 휘발성이므로 나중에 데이터를 사용할 수 있도록 보조 저장소에 영구적으로 데이터를 저장하는 데 파일을 사용합니다.
  • 때때로 일부 응용 프로그램에서는 텍스트 파일 또는 바이너리 파일에서 데이터를 읽고 싶을 수 있으므로 open, read, write 메서드 등과 같은 Python의 내장 함수를 사용하여이를 달성 할 수 있습니다.
  • 쓰기 방법을 사용하는 동안에는 파일에 기록한 모든 데이터를 덮어 쓰고 이전 데이터를 잃게되므로 매우주의해야합니다.
  • 데이터 덮어 쓰기를 방지하려면 파일 끝에 데이터가 추가되도록 쓰기 및 추가 모드에서 파일을 여는 것이 좋습니다.
  • 바이너리 모드에서 파일을 열면 인코딩 매개 변수가 허용되지 않습니다.
  • "os"모듈 / 패키지에서 rename 및 remove 메소드를 사용하여 파일에서 이름 변경 및 삭제를 수행 할 수 있습니다.

Python 파일 처리에 대한이 유익한 자습서를 즐기 셨기를 바랍니다. 다가오는 튜토리얼에서는 Python Main Function에 대해 자세히 설명하겠습니다.

 

728x90
반응형
그리드형

댓글