import keyword
import re
f = open('Python2.py', 'r', encoding = 'UTF8')
dic = {}
count = 0
for i in f:
word = re.sub('\n', '', i)
word = re.sub(':', '', i)
word = i.split()
for key in word:
if key in keyword.kwlist:
count += 1
dic[key] = count
print(dic)
스파이더로 작성했습니다
제가 의도하려는 코드는 임의의 파일 안에 있는 keyword와 keyword의 빈도 수를 딕셔너리에 넣는것입니다
일단 위의 코드는 keyword를 딕셔너리의 키로 설정하는 것 까지는 됐는데, 밸류부분에서 빈도 수가 정확하게 일치하지 않습니다
count를 어떻게 해줘야 빈도 수가 나올까요?
아니면 다른 코드에 문제가 있는지.. 잘 모르겠습니다
쉬울것 같은데 어려워서 골머리를 앓고 있습니다ㅜ
13개의 댓글
무분별한 사용은 차단될 수 있습니다.
필수
카운트 0으로 초기화 없이 계속 올라가기만 하는거는 의도하신건가요?
쥐약
for key in word: 루프를 넘기고 count = 0을 해봤는데도
이상한 값이 나와서 없애봤습니다
필수
re.sub('\n', '', f)처럼 파일단위로 변환하지 않고 i for f처럼 한글자씩 반복하시는 이유가 따로 있나여
쥐약
그건 제가 몰랐던 부분입니다.. 그렇게도 되는군요
필수
파일이 몇글자인진 모르겠지만 f=f.read(50)처럼 글자수 정해서 문자열로 저장한 뒤에 re.sub('\n|:','',f) 해보세요~
필수
그리고 split()쓰신거 보면 띄어쓰기로 구분하고싶으신 것 같은데 그럼 ''말고 ' '(띄어쓰기)가 맞겠네여
쥐약
코드가 많이 짧아졌네요 감사합니다..
그런데 아직 count의 늪에서 벗어나질 못했네요.. 몇시간동안 보느라 피곤해서 그런건지..ㅠㅠ
내일 다시 해봐야겠습니다
쥐약
import re
import keyword
infile = open('Python2.py', 'r', encoding = 'UTF8').read(10000)
re.sub('\n|:', '', infile)
word = infile.split()
dic = {}
for key in word:
count = 0
if key in keyword.kwlist:
for i in range(len(word)):
if word[i] == key:
count += 1
dic[key] = count
print(dic)
된 것 같아요! 도움주셔서 감사합니다 ㅠㅠ
필수
잘은 모르겠지만 파이썬 파일 내의 예약어당 해당 예약어가 쓰인 횟수를 기록하는 딕셔녀리를 만들고싶으시다면
import re
import keyword
infile = open('Python2.py', 'r', encoding = 'UTF8').read()
re.sub('\n|:', ' ', infile) # 띄어쓰기 넣어주시구
word = infile.split()
dic = {}
for key in word:
if key in keyword.kwlist: # word를 띄어쓰기마다 자른 하나의 단어가 예약어일때
if key in dic : #딕셔너리에 원래 있었다면 밸류값만 하나 더함
dic[key]+=1
else : #딕셔너리에 없었다면 갯수가 1인 키값 하나 생성
dic[key]=1
print(dic)
###갯수는 해당 딕셔너리의 밸류값에 저장되므로 카운트 변수는 필요없겠네요
이렇게 [key in dic ~ else] 구문으로 딕셔너리에 있으면 증가 없으면 생성하는법을 외워두시면 나중에 해쉬알고리즘 쓰실때나 횟수기록하실때 진짜 간편하니까 외워두시는게 좋아연 즐거운 파이썬 하십셔
쥐약
정말 이해가 잘됐네요 감사합니다
key in dic 이걸 생각을 못하고 카운트 변수에 힘을 너무 줬네요
편안한 밤 되십셔
alco
제가 keyword 라이브러리를 몰라서 그러는데 list(open(~~))으로 리드 안해도 배열형식으로 나오나요?
쥐약
위 코드상 word = i.split() 부분에서 한 줄씩 list가 출력되는걸 확인했습니다
alco
아 맞넹 그러면 윗분 말대로 '' 말고 ' '쓰시면 바로 되실듯