처리해야할 데이타가 많아지면, 일일이 변수에 저장하는게 힘들어집니다.
이럴땐 파일에서 불러오는게 편합니다.
파일 통째로 불러오기
filename = 'q008_data.txt' with open(filename) as file_object: contents = file_object.read()
모든 텍스트가 contents이라는 하나의 긴 문자열로 들어가서, contents[n] 으로 한글자씩 불러서 사용할수 있습니다. 라인단위의 데이터에서는 오른쪽끝 공백이 포함된상태로 문자열이 생성됩니다.
with open('q008_data.txt') as data: contents = data.read()
파일이름을 직접 적어줘도 되고,
data = open('p067_triangle.txt', 'r') lines = data.read() data.close()
with 구문 없이 파일을 open 하고 close 시켜줘도 됩니다.
파일을 라인단위로 불러오기(리스트)
라인 단위로 리스트를 생성해 줍니다.
with open('q008_data.txt') as data: lines = data.readlines()
n번째 줄이 lines[n-1]에 문자열로 들어갑니다. 문자열을 읽는 인덱스까지 포함하면 lines[n][m] 처럼 2차원 리스트나 배열처럼 불러서 사용할수 있습니다. 오른쪽끝에 공백문자는 포함된 상태입니다.
공백문자 제거 & 병합
string ='' for line in lines: string+= line.rstrip() #오른쪽 끝 공백을 제거하면서 병합
여러라인을 하나로 합칠때는 라인끝마다 공백이 있는데, .rstrip()이라는 함수로 제거해주어야 합니다. .split()을 했을경우는 rstrip()을 따로 해주지 않아도 자동으로 제거됩니다.
string = ''.join([line.rstrip() for line in lines])
축약된 코드
with open("q008_data.txt") as f: lines = f.readlines() string = ''.join([line.rstrip() for line in lines]) print(string)
축약된 코드 -2
with open("q008_data.txt") as f: string = ''.join([line.rstrip() for line in f.readlines()]) print(string)
2차원 리스트로 불러오기(split)
filename = 'q018_data.txt' with open(filename) as data: lines = data.readlines() numbers=[] for line in lines: numbers.append(line.split())
아마 수열문제 같은걸 풀기위해서 주로 사용하게 될 방법일텐데, 일정한 공백이나 특수문자 단위로 구분돼있는 수열의 경우 .split()이라는 명령으로 공백이나 특수문자를 기준으로 자른다음에, numbers라는 새로운 리스트안의 리스트, 2차원 리스트로 할당하는 방식입니다.
축약형
with open('p067_triangle.txt') as data: numbers = [[i for i in line.split()] for line in data.readlines()]
문자->숫자
with open('p067_triangle.txt') as data: numbers = [[int(i) for i in line.split()] for line in data.readlines()]
숫자로 바꿀시에는 i 에 int()함수만 추가해주면 됩니다.
URL로 다운받은 파일 사용하기
from urllib.request import urlretrieve urlretrieve("https://raw.githubusercontent.com/nomadlife/project-euler/master/q008_data.txt", "q008_data.txt")
주소와, 저장할 파일이름을 정해주면, 나머지는 앞부분에 설명한, 리스트나 문자열로 불러오는 코드를 이어붙이면 됩니다. 참고로 Github상의 파일을 불러올때는 url주소가 약간 다르니 참고하세요. (https://github.com/~~ 이 아니고, https://raw.githubusercontent.com/~~ 으로 바꿔줘야됩니다.)
아래 링크는 string, List, Array 사용법을 설명한 자료이니 참고하시면 되겠습니다.
http://www.physics.nyu.edu/pine/pymanual/html/chap3/chap3_arrays.html