본인 c,c++만 배웠는데 이번학기 대칭키암호론 과제가 파이썬으로 내서
구조는 대충 짯는데 문법이 틀려서 ㅠㅠ
일단 프로그램 목적은
어떤 파일에 영어 문자의 문자열이 들어있는 파일명을 가져다가 빈도 목록이 들어 있는 딕셔너리 반환임.
일단 파일입출력 말고 그냥 문자열로 입출력할때 코드는 이러함
def char_freq(str):
freq = {}
for c in str:
if c in freq:
freq[c] += 1
else:
freq[c] = 1
return freq
print(char_freq("abcdefaaa"))
이걸 이제 함수에 입력받는걸 파일로 하고싶은건데
문법 1도 모르는 내가 짠 코드는 아래와 같음.
어떻게 수정해야 함??
def char_freq_file(file):
freq = {}
fp = open(file)
for c in fp
if c in fp:
freq[c] += 1
else:
freq[c] = 1
return freq
f = open("asd.txt", 'w')
f.write("abcdefasfasdfasdf")
print(char_freq_file(f))
f.close()
with open (파일, r) as f: text = f.readlines() for i in text: char_freq_file(text[:-1])
좀만 상세하게 알려주실 수 있나여? 함수 안부터.. 잘못된것같은데
나도 초보지만 파일을 먼저 오픈하면 대충 f = open(file) 하잖아 그럼 그냥 f를 인수로 넣어주고 읽는건 어때?
아 그리고 오픈할 때 모드 w말고 r로 하고
이거는 그냥 팁인데 from collections import defaultdict 한 다음에 freq = defaultdict(int) 이걸로 쓰면 없는 키 호출하면 자동으로 벨류값 0 들어가니깐 딕셔너리에 있는지 없는지 if문 돌릴 필요 없어. 속도는 뭐가 더 빠른지는 모르는데 편하긴 함.
아 이미 f를 인수로 넣어줬구나. w라서 작성모드인데 읽으려고해서 안되는건가? 아니면 참조가 잘못되는건가? 나도 안해본거라... 에러메세지를 봐야할듯.
일단 파일 만들어서 문자열 아무거나 써서 저장하려고 w 로 한건데.
쓴다음에 다시 f= open("asd.twt",'r') 로 열어줘야되냐??