회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


Python 9강 - 파일

artsone | 2007.11.03 02:59 | 조회 9962
Python09-1.asf

Python 9강
파일

1. 파일 쓰기
2. 파일 읽기
3. 라인 단위로 파일 읽기
4. 라인 단위로 파일 쓰기
5. 파일에서 원하는 만큼의 문자 읽기
6. 파일 처리 모드
7. 임의 접근 파일
8. 파일 객체 속성들
9. 파일 입출력 예제
10. 표준 입출력 방향 전환
11. 지속 모듈



1. 파일 쓰기
#객체의 참조 주소를 복사하는 것

>>> s = '' #문자열
>>> f = open('test.txt', 'w') #open(파일명, write모드)
>>> f.write(s) #write()로 문자열을 쓰기
>>> f.close() #파일 껑璲?완료되면 close()를 굳이 사용 안해도 된다.


2. 파일 읽기

>>> f = open('test.txt') #저장된 파일을 open
>>> s = f.read() #read()하여 s에 넣는다.


>>> f = open('test.txt', 'w') #test.txt 파일에 저장
>>> f.write('File writing test') #문자열을 저장
>>> f.close()
>>> f = open('test.txt') #test.txt 파일을 열고
>>> s = f.read() #문자열을 읽어온다.
>>> s
'File writing test'

C:Python25 폴더에 보면 저장된 파일이 있을 것이다.


3. 라인 단위로 파일 읽기
#관련 메쏘드
- readline() - 한 줄 씩 읽는다

예1)
>>> f = open('test.txt', 'w')
>>> f.write('''first line #여러 라인의 문자열 쓰기
second line
third line
fourth line''')
>>> f.close()
>>> f = open('test.txt')
>>> f.readline() #한 줄만 불러온다.
'first linen'
>>> print f.readline() #print문으로도 가능
second line

>>> f.readline() #한 줄 씩만 불러온다.
'third linen'
>>> f.readline()
'fourth line' #더이상 없으면 null로 표시
>>> f.readline()
''

예2-1)
>>> f = open('test.txt')
>>> line = f.readline()
>>> while line: #while문을 이용해 문자가 있는 모든 라인 출력
print line
line = f.readline()


first line

second line

third line

fourth line

예2-2)
>>> f = open('test.txt')
>>> line = f.readline()
>>> while line:
print line, #,를 사용해 한줄 띄는 현상을 없앤다.
line = f.readline()


first line
second line
third line
fourth line


- readlines() - 전체를 라인 단위로 리스트에 저장

예1)
>>> f = open('test.txt')
>>> f.readlines()
['first linen', 'second linen', 'third linen', 'fourth line']

예2)
>>> f = open('test.txt')
>>> lines = f.readlines()
>>> for line in lines: #readlines()와 for문을 이용한 출력
print line, #위 while문 사용하는 것 보다 편리하다.


first line
second line
third line
fourth line

- xreadlines() - 필요한 만큼 씩 라인단위로 공급(lazy evaluation) (v2.1)

>>> f = open('test.txt')
>>> for line in f.xreadlines():
print line,


first line
second line
third line
fourth line

- 파일 객체의 반복자 (v2.2)

>>> f = open('t.txt')
>>> for line in f: #v2.2부터 for문에 바로 사용 가능하다.
print line, #이 방법이 가장 효과적


first line
second line
third line
fourth line


4. 라인 단위로 파일 쓰기
#관련 메쏘드
- write(s) - 문자열 s 쓰기
- writelines(lines) - ?悶?리스트 쓰기

예1)
>>> lines = ['first linen', 'second linen', 'third linen'] #n 유의
>>> f = open('test2.txt', 'w')
>>> f.writelines(lines) #문자열 리스트 쓰기1

예2-1)
>>> lines = ['first linen', 'second linen', 'third linen']
>>> f = open('test2.txt', 'w')
>>> f.write(''.join(lines)) #문자열 리스트 쓰기2-1

예2-2)
>>> lines = ['first line', 'second line', 'third line']
>>> f = open('test2.txt', 'w')
>>> f.write('n'.join(lines)) #문자열 리스트 쓰기2-2


#예제
- 텍스트 파일의 단어 수 알아보기
>>> f = open('test.txt')
>>> s = f.read()
>>> n = len(s.split()) #split() 단어 끊기
>>> n
8

또는
>>> n = len(open('test.txt').read().split())
>>> n
8

- 텍스트 파일의 라인 수 알아보기
>>> f = open('test.txt')
>>> s = f.read()
>>> string.count(s, 'n') #엔터키를 몇번 했나
3
>>> f = open('test.txt') #문자열 마지막에 n이 되어 있다.
>>> len(f.readlines())
4


5. 파일에서 원하는 만큼의 문자 읽기
#텍스트 파일의 문자 수 알아보기

>>> f = open('t.txt')
>>> len(f.read())
45
>>> import os
>>> os.path.getsize('t.txt')
48L #3차이 나는 것은 n의 갯수

>>> f = open('t.txt', 'rb') #rb 바이너리 모드로 불러옴
>>> len(f.read())
48 #위 예제와 같게 된다.

#윈도우 텍스트 모드에서는 1512 -> 12로 읽음
#윈도우즈에만 있는 현상이다.

#read(n) 이용

>>> f = open('t.txt')
>>> f.read(10) #read(n)을 해주면 필요한 n만큼의 문자열을 얻을 수 있다.
'first line'
>>> f.read(3)
'nse'
>>> f.read(3)
'con'


Python09-1.asf 끝


Python09-2.asf
6. 파일 처리 모드
파일 처리 모드 설명
'r' 읽기 전용
'w' 쓰기 전용
'a' 파일 끝에 추가(쓰기 전용)
'r+' 읽고 쓰기
'w+' 읽고 쓰기(기존 파일 삭제/새로 만듦)
'a+' 파일 끝에 추가(읽기도 가능)
- b가 붙는 경우에는 binary 모드(이진 파일 처리)

- 파일 추가의 예
>>> f = open('test1.txt', 'a') #append 모드
>>> f.write('fifth linen') #추가 문자열
>>> f.close()

>>> f = open('test1.txt', 'r+b') #r+모드 뒤에 b를 넣으면 바이너리 모드가 된다.
>>> f.write('sixth linen')
>>> f.close()

7. 임의 접근 파일
#원하는 위치의 내용을 마음대로 읽는다.
#관련 메쏘드
- seek(n) - n번째 바이트로 이동
- seek(n, 1) - 현재 위치에서 n바이트 이동
- seek(n, 2) - 맨 마지막에서 n바이트 이동(n은 보통 음수)
- tell() - 현재의 파일 위치 리턴

>>> f = open('test1.txt', 'r')
>>> f.tell() #현재 위치
0L
>>> f.read(10) #10까지 read하면
'first line'
>>> f.tell() #위치는 10이 된다.
10L
>>> f.seek(5) #5바이트 이동
>>> f.tell()
5L
>>> f.read(10)
' linenseco'
>>> f.seek(5, 2) #마지막에서 5바이트 이동
>>> f.tell() #현재 위치는 79
79L
>>> f.seek(0, 2) #마지막에서 0바이트 이동은 마지막 위치와 같다는 의미
>>> f.tell() #74
74L
>>> f.read() #79로 이동되어서 표시를 못한다.
''
>>> f.seek(-5, 2)
>>> f.read()
'inen'
>>> f.seek(-1, 2) #-1이나
>>> f.read()
'n'
>>> f.seek(-2, 2) #-2가 같은 위치에 있는 것은 2바이트씩 읽어서 그렇다
>>> f.read()
'n'
>>> f.close()


>>> f = open('test1.txt', 'a+') #a+ 모드 사용
>>> f.write('seventh linen')
>>> f.seek(0)
>>> f.read(10)
'first line'
>>> f.seek(0, 2)
>>> f.write('eighth linen')
>>> f.close()
>>> f.tell() #close를 했기 때문에 에러 발생

Traceback (most recent call last):
File "", line 1, in
f.tell()
ValueError: I/O operation on closed file


8. 파일 객체 속성들


08:30
9. 파일 입출력 예제
#문자열 치환 프로그램
(txt파일에 문자열의 단어를 치환하는 알고리즘)
- 실행 예
- 소스코드
python9-1.jpg

Python09-2.asf 끝



Python09-3.asf

#표준 출력을 파일로 저장하기

>>> import sys
>>> f = open('t.txt', 'w')
>>> stdout = sys.stdout #표준 출력 파일 저장해두기
>>> sys.stdout = f #sys의 stdout을 이용하여 print시 파일로 저장하기
>>> print 'sample string'
>>> print 'spam and ham'
>>> f.close()
>>> sys.stdout = stdout #표준출력 복구
>>> print 'asdf' #close했으므로 이 print 문자열은 파일에 저장되지 않는다.
asdf


#print문 직접 이용하기

>>> f = open('t.txt', 'w')
>>> print >> f, 'spam string'
>>> f.close()

10. 표준 입출력 방향 전환
#표준 출력을 문자열에 저장하기

>>> import sys, StringIO #StringIO모듈:문자열 입출력을 파일로 다룸
>>> stdout = sys.stdout #표준 출력 파일 저장해두기
>>> sys.stdout = f = StringIO.StringIO()
>>> print 'Sample output'
>>> sys.stdout = stdout #표준 출력 복구
>>> s = f.getvalue() #내부 문자열 가져오기
>>> print s #위 print문에서 파일 출력한 것을 문자열로 가져온 것을 알 수 있다.
Sample output


#문자열을 파일처럼 읽어내기

>>> f = StringIO.StringIO(s) #s문자열 객체에서 파일 객체 얻어내기
>>> print f.read().upper() #대문자로 변환


06:25
11. 지속 모듈
#지속 모듈 (persistent modules)
- 어떤 시점의 데이터를 저장해 두었다가 나중에 다시 사용할 수 있도록 한다.
#관련 모듈
- DBM관련(unix관련)
- DBM스타일의 데이터 베이스 모듈들. DBM모듈들은 사전 식의 인터페이스를 제공한다.
- anydbm, dbm, gdbm, dbhash, dumbdbm
- 키와 값이 모두 문자열이어야 한다.
- pickle 모듈
- 파이썬 일반 객체(사용자 정의 클래스, 인스턴스 포함)를 파일에 저장하는 모듈
- 재귀적인 관계의 객체도 모두 처리한다.
- marshal 모듈
- 파이썬의 기본 객체를 이진 포멧으로 저장
- 재귀적인 구조는 처리 할 수 없다
- 주로 .pyc 컴파일 코드를 읽는데 사용된다.
- pickle 모듈과 사용법이 같다.
- shelve 모듈
- dbn 모듈과 유사하지만 pickle을 이용하여 값을 저장하므로 임의의 객체를 저장할 수 있다.


DBM
#DBM 모듈 사용 예
- 사용법은 사전과 유사
- 키와 값은 문자열
- 생성된 파일은 또 다른 프로그램으로 읽혀질 수 있다.

>>> import anydbm
>>> f = anydbm.open('music', 'c') #'c'(create)는 파일이 없으면 생성해주고, 있으면 읽기로 오픈한다.
>>> f['flute'] = 'wood wind'
>>> f['violin'] = 'string'
>>> f['piano'] = 'keyboard'
>>> f.keys() #values와 items는 지원 안함
['flute', 'violin', 'piano']
>>> len(f) #레코드 수
3
>>> f.has_key('oboe') #has_key
0
>>> f['flute'] #값 읽어오기
'wood wind'
>>> f.close() #파일 닫기


피클링(pickling)
#pickle 모듈
- 임의의 파이썬 객체를 저장하는 가장 일반화된 모듈
- 기본 객체 뿐 아니라 사용자 클래스, 인스턴스 및 복잡하게 얽혀 있는 객체들의 관계까지 저장
- 객체를 파일로 출력하기
import pickle
pickle.dump(출력할 객체, 파일 객체)
- 객체를 파일에서 읽어들이기
object = pickle.load(파일객체)
- 문자열로 입/출력
dumps(출력할 객체) - 문자열로 리턴
s = dumps(object)
loads(문자열) - 문자열에서 객체로 변환
object = loads(s)

#pickle 모듈 사용 예
- 복합 객체를 저장하고 읽는 예

>>> import pickle
>>> phone = {'tom': 4354533, 'jack': 2345843, 'jim':4873943, 'Joseph': 4953576}
>>> list = ['string', 1234, 0.2345] #함수명이 같은 변수는 사용 금물
>>> tuple = (phone, list) #리스트, 튜플, 사전의 복합 객체
>>>
>>> f = open('pickle.txt', 'w') #파일 객체를 얻는다.
#파일로 출력(pickling)
>>> pickle.dump(tuple, f) #복합 객체 출력(튜플이 파일로 출력)
>>> f.close()
>>> f = open('pickle.txt', 'r')
#파일에서 읽어오기 (unpickling)
>>> x, y = pickle.load(f) #튜플의 내용을 x, y에 받는다.
>>> print x #x는 사전 (phone값을 받는다.)
{'jim': 4873943, 'Joseph': 4953576, 'jack': 2345843, 'tom': 4354533}
>>> print y #y는 리스트 (list값을 받는다.)
['string', 1234, 0.23449999999999999]


#사용자 정의 객체를 저장하고 읽는 예

>>> import pickle
>>> class Simple: #가장 단순한 클래스를 정의
pass

>>> s = Simple() #인스턴스 객체 생성
>>> s.count = 10 #인스턴스 이름 공간에 변수 생성
>>>
>>> f = open('pickle2.txt', 'w')
>>> pickle.dump(s, f) #인스턴스 저장
>>> f.close()
>>>
>>> f = open('pickle2.txt') #r모드 안써줘도 무방
>>> t = pickle.load(f) #인스턴스 가져오기
>>> print t.count
10

#이진 모드 피클링
- 기본 형식은 텍스트
- 문제가 생겼을 때 텍스트 에디터로 상황을 읽고 문제를 복구하기 쉽게 하기 위함
- 이진 모드로 저장하면 좀 더 효과적임(파일 크기, 속도)
- 사용 방법
- dump(s, f, 1)의 세번째 인수 1이 이진모드를 설정함

# cPickle 모듈
- pickle과 동일하지만 빠르다(1000배)


Python09-3.asf 끝
285개(14/15페이지)
프로그래밍
번호 제목 글쓴이 조회 날짜
25 [VisualStudio] Visual Studio Express 2012 다운로드/설치 첨부파일 푸딩뱃살 2731 2013.04.06 20:12
24 [Python] DC 이효리 겔러리에서 사진 추출하기 사진 artsOne 934 2009.03.27 01:54
23 [Python] 클래스 안의 함수 실행 artsOne 2544 2012.09.20 11:54
22 [Python] 기본 함수들 artsOne 4882 2012.09.12 15:39
21 [Python] Config Parser artsOne 2264 2012.08.28 13:55
20 [Python] win32 오픈오피스 실행 artsOne 2154 2012.08.01 17:38
19 [Python] 문자열의 기호들을 출력하기 artsOne 2868 2009.04.17 11:59
18 [Python] python 자료형 / 자료형 출력 artsOne 3394 2009.03.30 00:54
17 [Python] win32 모듈로 Excel 사용하기 artsOne 4113 2008.03.18 02:24
16 [Python] 용어 정리 artsone 3565 2008.02.26 23:11
>> [Python] Python 9강 - 파일 사진 첨부파일 artsone 9963 2007.11.03 02:59
14 [Python] Python 8강 - 객체의 복사 및 형 변환 사진 첨부파일 artsone 5218 2007.11.01 04:15
13 [Python] Python 7강 - 사전 사진 첨부파일 artsone 2871 2007.10.30 03:26
12 [Python] Python 6강 - 튜플 artsone 3139 2007.10.24 05:30
11 [Python] Python 5강 - 리스트 사진 첨부파일 artsone 7338 2007.10.23 22:13
10 [Python] Python 4강 - 문자열 사진 첨부파일 artsone 3700 2007.10.20 03:04
9 [Python] Python 3강 - 수치 자료형과 연산자 사진 첨부파일 artsone 4196 2007.10.18 17:01
8 [Python] Python 2강 - 파이썬 문과 기본 자료형 사진 첨부파일 artsone 5314 2007.10.15 02:25
7 [Python] Python 1강 - 파이썬이란? artsOne 3418 2007.10.11 23:36
6 [Python] [스크랩] Python은 무엇인가? artsone 1998 2008.02.26 16:20