파이썬 Python/파이썬

[5일차 / 파이썬] 람다, 파일 읽기

하나비 HANABI 2022. 12. 30. 18:25

람다

x = lambda a : a**2
print(x(5))

def x(a):
    return a**2
x(5)

'''
25
25
'''

파일 읽기 - open(), readlines(), close()

file = open('./data/Abc1115.txt', 'r')
lines = file.readlines()
file.close()

print(type(lines))
print(len(lines))
print(lines[0])
print(lines[:10]) # 앞에서부터 10개 꺼내기

for line in lines[:5]:
    print(line)
    
print('-'*30)    
for line in lines[:5]:
    print(line[:-1]) #맨 끝의 \n 제외하고 붙여서 출력
    
'''
<class 'list'>
1000
990001addx 17 29 16 49 43154CAC

['990001addx 17 29 16 49 43154CAC\n', '990002stch 30  9 48 25 81193CAA\n', '990003gali 93 60  6 84 36279ACA\n', '990004miat 73 22 48 24 72239BCC\n', '990005oran 33 38 59 58 28216CBA\n', '990006sj24 27 65 54 77 33256BAA\n', '990007kor2 33 85 98 60 66342ABA\n', '990008vsky 41  5 99 14 67226CAC\n', '990009kimd 74  4  1 33 53165BCA\n', '990010blue 55 84 50 89 37315ABA\n']
990001addx 17 29 16 49 43154CAC

990002stch 30  9 48 25 81193CAA

990003gali 93 60  6 84 36279ACA

990004miat 73 22 48 24 72239BCC

990005oran 33 38 59 58 28216CBA

------------------------------
990001addx 17 29 16 49 43154CAC
990002stch 30  9 48 25 81193CAA
990003gali 93 60  6 84 36279ACA
990004miat 73 22 48 24 72239BCC
990005oran 33 38 59 58 28216CBA
'''

    파일을 읽고 모든 라인을 출력하는 코드      

1. 파일 오픈하여 데이터 받아오기

2. 모든 정보가 string으로 담겨있으므로 숫자는 int로 바꾸기

 - 먼저 학생별 -> 카테고리별로 분리해서, 인덱스 활용하여 타입변환

3. 타입변환 후 다시 한 리스트에 다 담기 ex. [ [학생1 정보], [학생2 정보]... ]

 

필요한 리스트

- 가공 전의 모든 데이터 리스트, 학생1의 데이터 리스트 (정보들이 다 string 타입의 하나로 묶여있는 상태),

  학생1의 데이터를 카테고리별로 분리해서 담은 리스트(각 카테고리별로 인덱스가 생김 -> 활용해서 int로 변환),

  가공 후의 모든 데이터를 담을 리스트.

#Abc1115.csv파일을 읽고 모든 라인을 출력하는 코드 - 전처리

# 파일 오픈
file = open('./data/Abc1115.csv')
lines = file.readlines()
file.close()

# 전처리 방법
data=[]
for line in lines:
    line = line[:-1] # 한 학생의 모든 정보 (가공 전)
    temp = line.split(',') # ,를 기준으로 데이터를 분리하여 리스트에 담기
    for i in range(8): # string -> int
        if i!=1: # 인덱스 0~8 중 1만빼고 다 int로 형변환해야
            temp[i] = int(temp[i])
    data.append(temp) # 가공 후의 학생 정보를 하나의 리스트에
print(data)

'''
[[990001, 'addx', 17, 29, 16, 49, 43, 154, 'C', 'A', 'C'], 
[990002, 'stch', 30, 9, 48, 25, 81, 193, 'C', 'A', 'A'], 
.
.
.
'''