왜 txt파일 생성이 안되는걸까요..?

조회수 70회

아래의 코드는 특정 텍스트 파일을 읽고, 형태소로 분석해서 문서내 형태소의 갯수를 큰순서대로 카운트하는 코드인데요.

메인함수내에, 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 SeungHwan Kim 2020.3.22 02:14

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.