텍스트 분석 기초 예제_파일 읽어서 숫자를 골라 개수/합계/평균 구하기


텍스트 분석을 위해 간단한 파일 처리를 공유합니다.
파일을 읽어서 숫자만 골라서 출력하고, 숫자의 개수, 합계, 평균을 구하는 문제입니다.

간단히 알고리즘을 정리하면, 아주 간단합니다.

1.file을 open한다.
2.for
   2.1 line별로 읽어서 공백으로 항목을 분리한다.
   2.2 숫자를 찾아 숫자 리스트에 추가한다.
3.숫자들을 계산가능하도록 type을 전환한다.
4.합계와 평균을 구한다.

출력된 결과는 다음과 같습니다.

현재 파일위치: /Users/gracekelly.jeong/Documents
변경된 파일위치: /Users/gracekelly.jeong/Documents/doctoralcourse02/TextAnalysis/tadata
숫자:  [3.14, 45.0, 999.0, 34.0, 5.0, 15.0, 11.0, 33.0]
개수:  8
평균:  143.1425
합계:  1145.14

code는 아래와 같습니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
###################################################################################################
#Description : 파일을 읽어서 숫자만 골라서 출력하고, 숫자의 개수, 합계, 평균을 구한다.
#input : text와 숫자가 섞여 있는 파일
#  3.14 45 'Remember that everything' '999' '34'
#  5 15 'has God's Fingerprints on it '11' '33'
#output : 예.
#  숫자:  [3.14, 45.0, 999.0, 34.0]
#  개수:  4
#  평균:  270.285
#  합계:  1081.14
# 학습내용 : #파일 만들기, #숫자판별, #파일읽기 #로컬 폴더 위치 확인하기, #공백으로 split하기, #리스트의 string을 
#          numeric으로 바꾸기 
###################################################################################################

# 숫자 판별 
def isNumber(s):
    try:
        float(s)
        return True
    except ValueError:
        return False


# 평균 구하기 함수
def average(values):
    
    if len(values) == 0:
        return None
    return sum(values, 0.0) / len(values)


#main 

lists = []
list_num = []
output_file_name = 'test_w.txt'

#파일이 어느 위치에 생성될지 확인하고, 원하는 위치를 변경하고 싶다면.. 
import os
print('현재 파일위치:', os.getcwd())  #변경 전의 local directory 위치 
os.chdir('/Users/gracekelly.jeong/Documents/doctoralcourse02/TextAnalysis/tadata')  #for mac
#os.chdir('C:\Users\gracekelly\Desktop\doctoralcourse02\TextAnalysis')   # for Windows
print('변경된 파일위치:', os.getcwd()) #변경된 후의 local directory를 확인


#테스트용 파일 만들기
with open(output_file_name, "w", encoding="utf-8") as output_file:
    print("3.14 45 'Remember that everything' '999' '34'", file=output_file)
    print("5 15 'has God's Fingerprints on it '11' '33'", file=output_file)
    
 
    
#파일 읽어서 마지막 라인을 공백으로 split해서 리스트로 옮기기
with open(output_file_name, "r", encoding="utf-8-sig") as input_file:
    
    for line in input_file:
        line = line.strip()
        line = line.replace("'","")
        lists[len(lists):] = line.split()   #앞 line을 읽어 생성한 lists의 마지막에 추가
        
#숫자만 골라서 float로 type전환해서 새로운 리스트 만들기
for val in lists:
    if isNumber(val):
        list_num.append(float(val))
        

print('숫자: ', list_num)
print('개수: ', len(list_num))
print('평균: ', average(list_num))
print('합계: ', sum(list_num))

댓글