왜 txt파일 생성이 안되는걸까요..?
조회수 533회
아래의 코드는 특정 텍스트 파일을 읽고, 형태소로 분석해서 문서내 형태소의 갯수를 큰순서대로 카운트하는 코드인데요.
메인함수내에, get_tags 함수가 끼어들면 신규 output_file이 생기지않습니다. 혹시 어디서 어떤 오류때문인지 알수있을까요...?
//
import sys #모듈을 실행할 때, 터미널에서 사용자로부터 인자를 받기 위해 'sys.argv'를 사용하려고 'sys'를 임포트
from konlpy.tag import Okt #명사를 분리/추출하기 위해 한국어 형태소 분석기인 'konlpy'를 임포트
from collections import Counter
#텍스트에서 명사를 분리 추출한후 빈도 계산하는 함수.
def get_tags(text, ntags =50): #text는 분석에 사용할 텍스트,
# ntags는 분리명사중 결과를 출력할 명사갯수(아무입력없으면 상위 50개의 명사결과만 출력
splitter = Okt() #함수가 실행되면 우선 okt객체 생성
nouns =splitter.nouns(text) #이후 okt 객체의 nouns 메소드를 이용해 text에서 명사만 분리추출
count = Counter(nouns) #Counter 객체(빈도계산을 위한 사전객체)를 생성하고, 이를 참조변수 count에 할당한다.
return_list = [] #명사별 빈도수를 저장하기위한 리스트
""" Counter'객체의 'most_common'메소드는 정수를 입력받아 객체 안의 명사 중,
빈도수가 큰 명사부터 순서대로 입력받은 정수갯수만큼 저장되어 있는 객체를 반환"""
for n, c in count.most_common(ntags):
temp = {'tag':n, 'count': c}
return_list.append(temp)
return return_list
#메인함수
def main(argv):
if len(argv) !=4:
print('python[모듈이름][텍스트 파일명.txt][결과파일명.txt][단어 갯수]순으로 입력하세요')
return
open_file_name = argv[1]
output_file_name = argv[2]
noun_count = argv[3]
open_text_file = open(open_file_name, 'r') #r 읽기모드 w 쓰기모드 a 새로운내용추가모드
text = open_text_file.read()
tags = get_tags(text, noun_count)
open_text_file.close()
output_file = open(output_file_name, 'w')
for tag in tags:
noun = tag['tag']
count = tag['count']
output_file.write('{} {}\n'.format(noun, count))
output_file.close()
if __name__ == '__main__':
main(sys.argv)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
pycharm 이나 vs code 등을 사용해서 디버그모드로 중단점 설정해서 실행해 볼 수 있습니다.
tags 가 비어있어서 for 문을 안 돌 가능성이 가장 커보이는데, 우선
output_file.write
가 있는 라인에 중단점 설정해 놓고서 디버그모드로 실행해 보세요.해당라인에서 중단점 걸려서 돌고 있다면, 파일명 이나 실행패쓰 같은 것 확인할 것 같네요.
말하고 싶은 건, 디버그모드로 디버깅하는 방법을 배워 놓으면 편하다.
간단히 디버깅하고자 한다면,
def main(argv): if len(argv) !=4: print('python[모듈이름][텍스트 파일명.txt][결과파일명.txt][단어 갯수]순으로 입력하세요') return open_file_name = argv[1] output_file_name = argv[2] noun_count = argv[3]
의
argv[1]
,argv[2]
,argv[3]
을 각각 적당한 "입력파일명", "출력파일명", "명사갯수"로 수정해서 디버깅 실행해 보세요. 예를 들면,def main(argv): if len(argv) !=4: print('python[모듈이름][텍스트 파일명.txt][결과파일명.txt][단어 갯수]순으로 입력하세요') return open_file_name = "data.txt" # argv[1] output_file_name = "out.txt" # argv[2] noun_count = "10" # argv[3]
- 제가 아직 디버깅 방법도 하나씩 공부중입니다. 말씀주신 output_file.write에 빨간점 찍고 디버그 실행했을때 아래와같이 나오는데요. 딱히 걸리는 부분없이 아래와같이 실행되는데.. 이런경우엔 어떻게 해야할까요..? 디버그시에는 argv인자를 입력할수는없나요? pydev debugger: process 21020 is connecting Connected to pydev debugger (build 193.6494.30) python[모듈이름][텍스트 파일명.txt][결과파일명.txt][단어 갯수]순으로 입력하세요 Process finished with exit code 0 알 수 없는 사용자 2020.3.22 02:14
댓글 입력