반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



파일 및 폴더 관리


shutil, os 모듈을 이용한 파일 및 폴더 관리에 대해서 알아보겠습니다.



파일 혹은 폴더 복사하기


>>> import shutil

>>> shutil.copy('/tmp/spam.txt', '/tmp2')

# /tmp 경로에 있는 spam.txt 파일을 /tmp2 경로로 복사합니다.

>>> shutil.copy('eggs.txt', '/tmp2/eggs2.txt')

# 현재 작업 경로에 있는 eggs.txt 파일을 /tmp2 경로에 eggs2.txt 파일로 이름을 변경하여 복사합니다.

>>> shtuil.copytree('/tmp/bacon', '/tmp/bacon_backup')

# /tmp/bacon 폴더에 있는 모든 내용을 /tmp/bacon_backup 으로 복사합니다.


 

파일 혹은 폴더 이동 및 이름 바꾸기


>>> import shutil

>>> shutil.move('/tmp/bacon.txt', '/eggs')

# 만약 /eggs 라는 폴더가 있다면, /tmp 경로에 있는 bacon.txt 파일을 /eggs 경로로 이동합니다.

# 만약 /eggs 라는 폴더가 없다면, /tmp 경로에 있는 bacon.txt 파일을 / 경로로 옮기고 파일 이름을 eggs 로 변경합니다.

>>> shutil.move('/tmp/bacon.txt', '/eggs/new_bacon.txt')

# /tmp 경로 있는 bacon.txt 파일을 /eggs 경로로 옮기고 파일 이름을 new_bacon.txt 로 변경합니다.



파일 혹은 폴더 지우기


 os.unlink()

 파라미터로 보내진 경로에 있는 파일을 삭제합니다. 

 os.mkdir()

 파라미터로 보내진 경로에 폴더를 생성합니다. 

 os.rmdir()

 파라미터로 보내진 경로에 있는 폴더를 삭제합니다. 해당 경로에는 어떤 파일이나 폴더도 없는 빈 폴더여야 합니다.

 shutil.rmtree()

 파라미터로 보내진 경로에 있는 폴더를 삭제합니다. 그 안의 파일 및 폴더도 모두 삭제됩니다.



다음은 확장자가 txt 인 파일을 모두 삭제하는 코드입니다.


>>> import os

for filename in os.listdir():

if filename.endswith('.txt'):

os.unlink(filename)



디렉토리 경로 탐색


os.walk() 함수를 이용합니다.


>>> import os

>>> for folderName, subfolders, filenames in os.walk('.'):

>>>    print (folderName, subfolders, filenames)




파일 압축하기


zipfile 모듈을 이용한 파일 압축에 대해서 알아보겠습니다.



ZIP 파일 읽기


ZipFile 객체를 생성하여 필요한 작업을 수행하고 객체의 리소스를 해제해 줍니다.


>>> import zipfile, os

>>> testZip = zipfile.ZipFile('example.zip')

# example.zip 파일로 부터 ZipFile 객체를 생성합니다.

>>> testZip.namelist()

# example.zip 파일에 포함된 파일 리스트를 출력합니다.

>>> testFile = testZip.getinfo('test.txt')

# example.zip 파일에 들어 있는 test.txt 파일에서 정보를 읽어서 ZipInfo 형태의 객체를 돌려줍니다.

>>> testFile.file_size

# test.txt 파일의 압축되기 전 크기를 출력합니다.

>>> testFile.compress_size

# text.txt 파일이 압축된 파일 크기를 출력합니다.

>>> testZip.close()

# 객체의 리소스를 정리합니다.



ZIP 파일에서 추출하기


extract, extractAll 메소드를 이용하여 파일을 추출합니다.



전체 파일 추출하기


>>> import zipfile, os

>>> testZip = zipfile.ZipFile('example.zip')

>>> testZip.extractAll()

# 현재 작업 경로에 example.zip 파일에 있는 모든 파일을 추출합니다.

>>> testZip.close()



일부 파일 추출하기


>>> import zipfile, os

>>> testZip = zipfile.ZipFile('example.zip')

>>> testZip.extract('test.txt')

# 현재 작업 경로에 test.txt 파일을 추출

>>> testZip.extract('test.txt', '/tmp)

# /tmp 에 test.txt 파일을 추출



파일에서 압축하기


압축 파일을 생성하려면, ZipFile 객체를 생성할 때, 두 번째 인수로 'w' 를 전달하여 쓰기 모드로 열면 됩니다. 

파일을 압축해서 추가할 때는 write() 메소드를 사용합니다.


>>> import zipfile

>>> newZip = zipfile.ZipFile('new.zip', 'w')

>>> newZip.write('spam.txt')

>>> newZip.close()




반응형

'프로그래밍 > Python' 카테고리의 다른 글

decorator 사용하기  (0) 2024.06.06
8. 파일 읽고 쓰기  (0) 2019.02.21
7. 정규 표현식  (0) 2019.01.09
6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



파일과 파일 경로


파일 속성 : 파일 이름, 경로



경로 구분자


윈도우에서는 백슬래시(\), MacOS (OSX) 와 리눅스에서는 슬래시(/)


os.path.sep 으로 확인이 가능합니다.


os.path.join() 을 이용해서 운영체제에 관계 없는 경로 생성이 가능 


>>> import os

>>> os.path.join('usr','bin','spam')

'usr/bin/spam'  (MacOS or Linux)

'usr\\bin\\spam' (Windows)



유용한 메써드


 os.getcwd()

 현재 경로를 확인 

 os.makedirs()

 새 폴더 만들기 

 os.listdir()

 매개변수 경로에 있는 파일 이름 문자열의 리스트를 돌려줍니다. 



상대 경로 vs 절대 경로


절대 경로 : 항상 루트 폴더로 시작한다.

상대 경로 : 프로그램의 현재 작업 디렉터리를 기준으로 시작한다.


. : 현재 디렉터리

.. : 부모 디렉터리



os.path 모듈


os.path 모듈에는 파일 이름과 파일 경로에 관련된 많은 유용한 기능을 포함하고 있습니다.



 os.path.abspath()

 매개변수의 절대 경로 문자열을 돌려줍니다.

 os.path.isabs()

 매개변수가 절대 경로일 때 True를, 상대 경로일 때 False 를 돌려 줍니다.

 os.path.relpath()

 두번째 매개변수의 경로로 시작하는 첫번째 매개변수의 상대 경로 문자열을 돌려 줍니다.

 os.path.dirname()

 매개변수의 마지막 슬래시 앞에 오는 모든 문자열을 돌려 줍니다. (윈도에서는 백슬래시) - 보통 파일 경로가 됩니다.

 os.path.basename()

 매개변수의 마지막 슬래시 뒤에 오는 모든 문자열을 돌려 줍니다. (윈도에서는 백슬래시) - 보통 파일 이름이 됩니다.

 os.path.sep

 현재 운영체제의 경로 구분자

 os.path.getsize()

 매개변수 안에 있는 파일의 크기를 바이트 단위로 돌려줍니다.

 os.path.exists()

 매개변수가 가리키는 파일 또는 폴더가 존재하면 True를, 그렇지 않다면 False를 돌려 줍니다. 

 os.path.isfile()

 매개변수가 존재하며 파일이라면 True를, 그렇지 않다면 False를 돌려 줍니다. 

 os.path.isdir()

 매개변수가 존재하며 폴더라면 True를, 그렇지 않다면 False를 돌려 줍니다. 




파일 읽기 / 쓰기 프로세스


1. open() 함수를 호출하여 File 객체를 돌려받습니다.

2. File 객체에 대해서 read() 혹은 write() 메써드를 사용하여 작업을 합니다.

3. File 객체의 close() 메써드를 이용하여 파일을 닫습니다.



파일 열기 속성


 r

 파일을 읽기 모드로 열어서 돌려 줍니다.

 w

 파일을 쓰기 모드로 열어서 돌려 줍니다. (이미 파일이 존재하면 내용이 삭제됩니다.)

 a

 파일을 이어 쓰기 모드로 열어서 돌려 줍니다. (기존 파일이 존재하지 않으면 새 파일을 생성합니다.)

 x

 파일을 이어 쓰기 모드로 열어서 돌려 줍니다. (기존 파일이 존재하지 않으면 예외가 발생됩니다.)

 b

 파일을 바이너리 모드로 돌려 줍니다.

 +

 파일을 업데이트 모드로 돌려 줍니다.



파일 읽기 예제


>>> f = open('test.txt')

>>> data = f.read()

>>> f.close()


data에 파일 내용이 들어 갑니다.



파일 쓰기 예제


>>> f = open('test.txt', 'w')

>>> f.write("test")

>>> f.close()


test.txt 파일에 문자열 "test" 가 저장됩니다.



반응형

'프로그래밍 > Python' 카테고리의 다른 글

decorator 사용하기  (0) 2024.06.06
9. 파일 관리  (0) 2019.02.21
7. 정규 표현식  (0) 2019.01.09
6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



정규표현식으로 텍스트 패턴 검색


정규식 객체 만들기


re 패키지를 import 합니다.


>>> import re



정규표현식을 나타내는 문자열 값을 re.compile()에 전달하여 Rebex 패턴 객체 (혹은 Regex 객체)를 생성합니다.


>>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

(참고로 미국 전화번호 포맷은 000-000-0000 형식입니다.)



Regex 객체를 이용한 패턴 검색


위에서 생성한 패턴 객체에 search 매써드를 이용해서 match 객체를 돌려 받습니다.


>>> mo = phoneNumRegex.search('My number is 212-555-1234.')



Match 객체에 group 매써드를 이용해서 결과를 확인합니다.


>>> print (mo.group())

212-555-1234




정규표현식을 사용한 더 많은 패턴 검색


괄호로 묶기


패턴 중의 일부를 분리해서 사용하는 경우 (전화번호에서 지역 코드를 나머지 번호로부터 분리하고 싶은 경우)


>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')

>>> mo = phoneNumRegex.search('My number is 212-555-1234.')

>>> print (mo.group(1))

212

>>> print (mo.group(2))

555-1234

>>> print (mo.group(0))

212-555-1234

>>> print (mo.group())

212-555-1234

>>> print (mo.groups())

(212, 555-1234)



파이프로 여러 그룹 검색하기


'|' 글자를 파이프라고 합니다.

여러 가지 표현 중 하나만 일치해도 되는 곳에 사용 (or)

처음으로 일치하는 텍스트가 Match 객체로 반환됩니다.


>>> testRegex = re.compile(r'AAA|BBB')

>>> mo1 = testRegex.search('AAA and BBB')

>>> mo1.group()

'AAA'


>>> mo2 = testRegex.search('BBB and AAA')

>>> mo2.group()

'BBB'



물음표와 선택적 검색


해당 부분이 없거나 한 번만 나타나는 경우


>>> testRegex = re.compile(r'Super(wo)?man')

>>> mo1 = testRegex.search('The world of Superman')

>>> mo1.group()

'Superman'


>>> mo2 = testRegex.search('The world of Superwoman')

>>> mo2.group()

'Superwoman'



* 및 + 를 이용한 선택적 검색


* 표시는 0개 또는 그 이상과 일치를 의미

+ 표시는 1개 또는 그 이상과 일치를 의미


>>> testRegex = re.compile(r'Super(wo)*man')

>>> mo1 = testRegex.search('The world of Superman')

>>> mo1.group()

'Superman'


>>> mo2 = testRegex.search('The world of Superwoman')

>>> mo2.group()

'Superwoman'


>>> mo3 = testRegex.search('The world of Superwowowoman')

>>> mo3.group()

'Superwowowoman'


>>> testRegex = re.compile(r'Super(wo)+man')

>>> mo1 = testRegex.search('The world of Superman')

>>> print mo1

None


>>> mo2 = testRegex.search('The world of Superwoman')

>>> mo2.group()

'Superwoman'


>>> mo3 = testRegex.search('The world of Superwowowoman')

>>> mo3.group()

'Superwowowoman'



중괄호를 이용하여 특정 횟수 반복 패턴 검색


(A){3} # A가 정확하게 3회 반복

(A)(A)(A)


(A){3,5} # A가 3회 ~ 5회 반복

((A)(A)(A)|(A)(A)(A)(A)|(A)(A)(A)(A)(A))


>>> aRegex = re.compile(r'(A){3}')

>>> mo1 = aRegex.search('AAA')

>>> mo1.group()

'AAA'




최대 일치와 최소 일치


(A){3,5} 정규식은 'AAAAA' 문자열에서 'AAA', 'AAAA', 'AAAAA' 와 일치할 수 있다. 최대 일치는 'AAAAA', 최소 일치는 'AAA" 인데, 파이썬의 정규표현식은 기본적으로 최대 일치되는 값을 돌려줍니다. 최소 일치되는 값을 돌려받고 싶다면, 중괄호 뒤에 '?' 기호를 적어주면 됩니다.


>>> aRegex = re.compile(r'(A){3,5}')

>>> mo1 = aRegex.search('AAAAA')

>>> mo1.group()

'AAAAA'


>>> aRegex = re.compile(r'(A){3,5}?')

>>> mo2 = aRegex.search('AAAAA')

>>> mo2.group()

'AAA'




전체 패턴 검색


findall() 매써드 사용


>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')

>>> phoneNumRegex.findall('Cell: 212-555-1234 Work: 212-555-5678')

[('212', '555-1234'), ('212', '555-5678')]




문자 클래스


 짧은 문자

클래스 의미 

 \d

 0에서 9까지의 임의의 숫자 - (0|1|2|3|4|5|6|7|8|9) 혹은 [0-9]

 \D

 0에서 9까지의 숫자를 제외한 문자열

 \w

 문자, 숫자 혹은 '_' (word)

 \W

 문자, 숫자 혹은 '_' 가 아닌 모든 글자 

 \s

 빈칸, 탭 또는 줄바꿈 문자 (white space)

 \S

 빈칸, 탭 또는 줄바꿈 문자가 아닌 모든 글자




사용자 정의 문자 클래스 만들기


대괄호를 이용하여 사용자 정의 문자 클래스를 정의할 수 있습니다. 

예를 들어 대소문자 구분없이 영어의 소문자 하나를 매치시키고 싶다면, 아래와 같이 정의하면 됩니다.


>>> vowelRegex = re.compile(r'[aeiouAEIOU]')



하이픈을 사용하면 범위를 포함시킬 수 있습니다. 


>>> alnumRegex = re.compile(r'[a-zA-Z0-9]')




캐럿과 달러 기호 글자


^ - 텍스트의 시작

$ - 텍스트의 끝


>>> beginsWithHello = re.compile(r'^Hello')




와일드카드 문자


정규식에서 '.' 은 와일드카드라고 하며 줄바꿈을 제외한 모든 문자와 일치한다.


>>> atRegex = re.compile(r'.at')

>>> atRegex.findall('The cat in the hat sat on the flat mat.')

['cat', 'hat', 'sat', 'lat', 'mat']




대소문자를 구분하지 않고 일치시키기


>>> regex = re.compile(r'test', re.I)




문자열 매치해서 치환하기


>>> namesRegex = re.compile(r'Agent \w+')

>>> namesRegex.sub('CENSORED', 'Agent Alice gave the secret documents to Agent Bob')

'CENSORED gave the secret documents to CENSORED'


일치하는 텍스트 그 자체를 대체할 텍스트의 일부로 사용해야 하는 경우에는 \1, \2, \3 등과 같이 입력하면 Match 객체의 그룹 1, 2, 3 등으로 대체 됩니다.

>>> namesRegex = re.compile(r'Agent (\w)\w*')

>>> namesRegex.sub(r'\1****', 'Agent Alice gave the secret documents to Agent Bob')

'A**** gave the secret documents to B****'





반응형

'프로그래밍 > Python' 카테고리의 다른 글

9. 파일 관리  (0) 2019.02.21
8. 파일 읽고 쓰기  (0) 2019.02.21
6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



문자열 리터럴


문자열은 ' 로 시작해서 ' 로 끝난다. 혹은 " 로 시작해서 " 로 끝난다.



이스케이프 문자


문자열 안에 넣을 수 없는 글자를 사용하기 위해서 사용한다.

백슬래시(\) 다음에 문자열에 넣고 싶은 글자를 두는 방식으로 구성된다.


 이스케이프 문자 

 출력되는 글자 

 \'

 홑따옴표

 \"

 겹따옴표 

 \t

 탭 

 \n

 줄바꿈 

 \\

 백슬래시 



원시 문자열


문자열을 시작하는 따옴표 앞에 r을 사용하면 문자열을 원시 문자열로 만들 수 있다.

원시 문자열은 모든 이스케이프 문자를 완전히 무시하고 문자열에 나타나는 백슬래시를 인쇄한다.



세겹 따옴표를 사용하는 여러 줄에 걸친 문자열


문자열에 줄바꿈을 넣으려면 \n 이스케이프 문자를 사용할 수도 있지만 여러 줄 문자열을 사용하는 것이 더 편할 때가 많다. 파이썬에서 여러 줄 문자열은 세 개의 홑따옴표로 시작하고 끝난다.



여러 줄 주석


여러 줄 주석은 세 개의 겹따옴표로 시작하고 끝난다.



문자열 인덱스와 슬라이스


문자열은 리스트처럼 인덱스와 슬라이스를 사용한다.

문자열을 리스트로 생각하고 문자열의 각 글자는 인덱스에 상응하는 아이템으로 생각할 수 있다.



문자열에 in 또는 not in 연산자 사용하기


in 또는 not in 연산자는 리스트 값과 마찬가지로 문자열에서도 쓸 수 있다.



쓸모 있는 문자열 메소드


 메소드 

 기능 

 upper()

 문자열을 대문자로 변환한 새로운 문자열을 돌려준다. 

 lower()

 문자열을 소문자로 변환한 새로운 문자열을 돌려준다.  

 isupper()

 문자열의 모든 영문자가 대문자면 True 아니면 False를 돌려준다.

 islower()

 문자열의 모든 영문자가 소문자면 True 아니면 False를 돌려준다.

 isalpha()

 문자열이 문자로만 구성되어 있으며 빈칸이 없으면 True를 돌려준다. 

 isalnum()

 문자열이 문자와 숫자로만 구성되어 있으며 빈칸이 없으면 True를 돌려준다.

 isdecimal() 문자열이 숫자로만 구성되어 있으며 빈칸이 없으면 True를 돌려준다. 
 isspace()

 문자열이 빈칸, 탭, 줄바꿈 문자로만 구성되어 있지만 비어 있지 않으면 True를 돌려준다.

 istitle() 문자열이 단어들로만 구성되어 있으며, 각 단어는 대문자로 시작하고 그 뒤에 따라오는 글자들은 소문자로 되어 있으면 True를 돌려준다.
 startwith()

 메소드를 호출한 문자열 값이 메소드에 전달된 문자열로 시작되면 True를 돌려준다.

 endwith()

 메소드를 호출한 문자열 값이 메소드에 전달된 문자열로 끝나면 True를 돌려준다. 

 join()

 리스트를 하나의 문자열 값으로 연결해서 새로운 문자열을 돌려준다. 

 split()

 호출한 문자열을 지정한 값을 구분자로 분할해서 리스트를 만들어서 돌려준다. 

 rjust()

 호출한 문자열을 오른쪽으로 정렬하고 왼쪽에 공백을 채운 문자열을 돌려준다. 

 ljust()

 호출한 문자열을 왼쪽으로 정렬하고 오른쪽에 공백을 채운 문자열을 돌려준다.

 center()

 호출한 문자열의 좌우에 공백을 채우고 가운데로 정렬한 문자열을 돌려준다.

 strip()

 양쪽 끝에 있는 공백 문자를 제거하고 새로운 문자열을 돌려준다. 

 rstrip()

 오른쪽 끝에 있는 공백 문자를 제거하고 새로운 문자열을 돌려준다.

 lstrip()

 왼쪽 끝에 있는 공백 문자를 제거하고 새로운 문자열을 돌려준다.



반응형

'프로그래밍 > Python' 카테고리의 다른 글

8. 파일 읽고 쓰기  (0) 2019.02.21
7. 정규 표현식  (0) 2019.01.09
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
3. 함수  (0) 2019.01.06
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.




사전 데이터 타입

리스트와 마찬가지로 사전은 많은 값의 모음이다.
리스트의 인덱스와는 달리 사전의 인덱스는 다양한 데이터 유형을 사용할 수 있다.
사전의 인덱스를 키라고 하며, 키와 그에 연관된 값을 키-값 쌍이라고 한다.
코드에서 사전은 중괄호 {}로 정의된다.


사전과 리스트

리스트와는 달리 사전의 아이템들은 순서가 없다.
사전은 순서가 없지만 키로 임의의 값을 쓸 수 있다.


사전 메소드

 메소드 

 기능 

 keys()

 사전의 키를 튜플로 돌려준다.

 values()

 사전의 값을 튜플로 돌려준다.

 items()

 사전의 키 - 값 쌍을 튜플로 돌려준다.

 get()

 키에 해당하는 값을 가져온다. 존재하지 않을 때 돌려줄 값을 설정할 수 있다.

 setdefault()

 특정 키에 값이 존재하지 않는 경우에 돌려줄 값을 설정한다. 





반응형

'프로그래밍 > Python' 카테고리의 다른 글

7. 정규 표현식  (0) 2019.01.09
6. 문자열 다루기  (0) 2019.01.08
4. 리스트와 튜플  (0) 2019.01.06
3. 함수  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.




리스트 


- 순서를 가진 여러 가지 값의 배열

- [] (대괄호) 로 표기

- 쉼표를 구분자로 하여 리스트에 아이템들을 초기화 할 수 있음

- 아이템들의 타입이 달라도 상관 없음


>>> [1, 2, 3]

>>> ['a', 'b', 'c']

>>> [1, True, 'A', [1, 2, 3]]



인덱스를 이용해서 리스트의 개별 아이템 얻기


리스트 이름에 대괄호를 사용해서 0부터 시작하는 정수로 순차적인 접근이 가능하다.


>>> test = ['a', 'b', 'c']

>>> test[0]

'a'

>>> test[1]

'b'

>>> test[2]

'c'


리스트 값의 개수를 초과하는 인덱스를 사용하면 IndexError 오류가 발생한다.


인덱스는 정수값만 가능하며, 그 이외의 타입에는 TypeError 오류가 발생한다.


음수 인덱스도 사용이 가능하며, -1은 리스트의 마지막 값을 뜻하고, -2는 리스트의 끝에서 두 번째 값을 의미힌다.



부분 리스트


- 슬라이스를 이용해서 부분 리스트를 얻을 수 있다.

- 리스트 이름 [시작 인덱스 : 포함하지 않는 마지막 인덱스] 으로 정의 한다.


>>> test = ['a', 'b', 'c']

>>> test[0:3]

['a', 'b', 'c']

>>> test[0:2]

['a', 'b']

>>> test [1:3]

['b', 'c']

>>> test [0:-1]

['a', 'b', 'c']


콜론(:)을 기준으로 앞의 값을 비워두면 앞의 값은 0으로 처리된다.

콜론(:)을 기준으로 뒤의 값을 비워두면 뒤의 값은 리스트 길이 혹은 -1로 처리된다.



리스트 변경


인덱스를 지정해서 할당을 하면 값이 변경된다.


>>> test = [1, 2, 3]

>>> test[0] = 'a'

>>> test

['a', 2, 3]



리스트 병합


>>> [1, 2, 3] + ['a', 'b', 'c']

[1, 2, 3, 'a', 'b', 'c']


>>> ['a', 'b'] * 2

['a', 'b', 'a', 'b']



리스트 값 제거


del 명령어를 사용한다.


>>> test = [1, 2, 3]

>>> del test[1]

>>> test

[1, 3]



다중 할당


한 줄의 코드로 리스트 안에 있는 값을 여러 변수에 할당한다.


>>> test = [1, 2, 3]

>>> a, b, c = test

>>> a

1

>>> b

2

>>> c

3



리스트 메소


메소드는 함수와 기능은 같지만 객체 내에 정의되어 있는 멤버 함수를 메소드라고 한다.


 메소드 

 기능 

 index()

 리스트 내에 있는 값의 첫번째 인덱스를 리턴한다. 

 append()

 리스트에 새 값을 마지막에 추가한다.

 insert()

 리스트에 새 값을 지정한 인덱스에 추가한다.

 remove()

 리스트 내에서 값을 찾아서 첫번째로 나오는 값을 제거한다. 

 sort()

 리스트 안의 값을 정렬한다. (reverse 키워드로 역순 정렬 가능)



튜플 (tuple)


- 리스트와 비슷하지만 한 번 정의되면 변경이 불가능하다.

- () 로 표기



리스트와 튜플의 전환


list() 함수를 이용하면 튜플에서 리스트를 생성해 준다.


>>> list(('a', 'b', 'c'))

['a', 'b', 'c']


tuple() 함수를 이용하면 리스트에서 튜플을 생성해 준다.


>>> tuple([1, 2, 3])

(1, 2, 3)



참조 전달


정수형, 숫자형, 문자열 값을 매개 변수로 함수를 호출하는 경우, 해당 값은 파라미터 변수로 복사된다.

그 외의 타입을 매개 변수로 함수를 호출하면, 해당 타입의 참조가 파라미터로 전달된다. 

(참조 값은 복사되어도 같은 실제 값을 가리키게 된다.)



copy() vs deepcopy()


리스트 등의 데이터의 사본을 만들기 위해서는 copy 라이브러리에 있는 copy() 혹은 deepcopy() 명령어를 사용할 수 있다.

리스트의 모든 아이템이 정수형, 숫자형, 문자열 값으로만 되어 있다면 copy() 를 쓰는 것으로 충분하지만, 아이템에 다른 리스트나 튜플 등이 들어 있다면 deepcopy() 를 사용해야 제대로 사본이 생성된다. 




반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
3. 함수  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
1. 파이썬 기초  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.



함수



파이썬에서는 여러 가지 내장 함수를 제공하지만, 필요한 함수를 직접 만들어 쓸 수도 있다.


함수를 사용하는 목적은, 코드의 묶음을 여러 차례 실행시키는 것이다. 함수를 사용하지 않으면 필요할 때마다 매번 코드를 복사해서 써야 하는데, 중복되는 부분이 많아지면, 코드의 가독성이 떨어지고, 디버깅도 어려워진다. 중복을 제거하면 프로그램은 짧아지고, 읽기 쉽고, 고치기 쉬워진다.



함수 정의 하기


def 구문을 이용해서 함수를 정의한다.


def hello():
    print ('Hello')



함수에 매개변수 추가하기


def hello(name):
    print ('Hello', name)



반환값과 return 문


def hello(name):
    return 'Hello ' + name


None 값


파이썬에는 None 이라는 값이 있다. 이는 값이 없음을 의미한다. 



키워드 매개변수와 print()


print() 함수에 다음과 같은 매개 변수 사용이 가능하다.


print ('Hello', end='')            # 출력 후 줄바꿈을 하지 않음
print ('a', 'b', 'c', sep=',')     # 출력시 구분자로 ',' 로 사용



지역 및 전역 범위


- 전역 범위의 코드는 지역 변수를 사용할 수 없다.

- 지역 범위는 전역 변수를 사용할 수 있다.

- 함수의 지역 범위 안에 있는 코드는 다름 지역 범위의 변수를 사용할 수 없다.

- 범위가 서로 다르다면 같은 이름의 지역 변수를 사용할 수 있다.



global 문


함수 안에서 전역 변수를 수정해야 하는 경우 사용



예외 처리


try: ~ except: 구문을 이용하여 예외를 처리한다.


def test(div):
    try:
        return 100 / div
    except ZeroDivisionError:
        print ('Error')










반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
2. 흐름 제어  (0) 2019.01.04
1. 파이썬 기초  (0) 2019.01.04
반응형

* 이 포스트는 "파이썬 프로그래밍으로 지루한 작업 자동화하기" 의 내용을 참조해서 작성하였습니다.

* 파이썬 3.3을 기준으로 작성하였습니다.

 


비교 연산자


 연산자 

 의미 

 ==

 같음 

 !=

 같지 않음

 <

 작다

 >

 크다

 <=

 작거나 같다

 >=

 크거나 같다



And 연산


 표현식

 결과 

 True and True

 True 

 True and False

 False 

 False and True

 False 

 False and False

 False 



Or 연산


 표현식

 결과 

 True or True

 True 

 True or False

 True 

 False or True

 True

 False or False

 False 



Not 연산


 표현식

 결과 

 not True 

 False

 not False

 True



흐름 제어 요소


흐름 제어문은 조건으로 시작하고, 코드 블록이 항상 그 뒤를 뒤따른다.



조건


조건은 항상 True 혹은 False 인 하나의 Bool 값으로 평가된다. Bool 표현식은 모두 조건으로 간주될 수 있다.



코드 블록


파이썬 코드의 여러 줄을 블록으로 묶을 수 있다. 블록의 시작과 끝은 들여쓰기를 통해 표시한다. 다음은 블록에 대한 규칙이다.


- 블록은 들여쓰기가 증가할 때 시작된다.

- 블록은 다른 블록을 포함할 수 있다.

- 블록은 들여쓰기가 없거나 그 블록을 포함한 블록의 들여쓰기 수준으로 감소할 때 끝난다.



흐름 제어문


 if

 조건을 평가하여 True 일 때, 다음에 오는 코드 블록을 실행

 else

 if 와 함께 쓰이며, 조건이 False 일 때, 다음에 오는 코드 블록을 실행

 elif

 if 와 함께 쓰이며, 다시 조건을 평가하여 True 일 때, 다음에 오는 코드 블록을 실행

 while

 조건이 True인 동안, 코드 블록을 반복 실행

 break

 반복문의 코드 블록에서 벗어남

 continue

 반복문에서 continue 구문 이하의 코드를 실행하지 않고, 다음 반복 코드를 실행

 for

 정해진 횟수 동안 코드 블록을 실행



반응형

'프로그래밍 > Python' 카테고리의 다른 글

6. 문자열 다루기  (0) 2019.01.08
5. 사전 (Dictionary)  (0) 2019.01.07
4. 리스트와 튜플  (0) 2019.01.06
3. 함수  (0) 2019.01.06
1. 파이썬 기초  (0) 2019.01.04

+ Recent posts