파이썬_실전 프로젝트

데이터파일 불러오기

처리해야할 데이타가 많아지면, 일일이 변수에 저장하는게 힘들어집니다.

이럴땐 파일에서 불러오는게 편합니다.

 

파일 통째로 불러오기
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

댓글

댓글 본문
  1. nomadlife
    줄바꿈을 하실려면 라인끝에 개행문자 "\n" 를 추가해보세요. output += "\n"
    대화보기
    • myho900@naver.com
      안녕하세요 보다 궁금한게 있는데 지금 출력된 값을 텍스트 파일로 저장할때
      한 라인으로 길게 쭉 들어가는데 혹시 특정 조건을 걸어서 (띄워쓰기 기준으로 줄바꿈해서 저장된다던지 하는 방법이 있을까요??
    버전 관리
    nomadlife
    현재 버전
    선택 버전
    graphittie 자세히 보기