2014-03-27 2 views
0

파이썬에서 텍스트 파일에있는 문자 또는 기호의 수를 계산하려고합니다. 내 텍스트 파일은 '*#%##'이지만 어떤 이유로 기호를 입력 할 때 입력보다 문자를 모두 계산하므로 예를 들어 '#'을 입력하면 3보다 5가 출력됩니다.파이썬에서 텍스트 파일의 특정 문자 또는 기호 계산하기

이것은 내가 지금까지했던 : 당신은 for 루프에서 Symbol 리 바인딩하는

Symbol = input("Pick a Symbol ") 
freq = 0 
with open ("words.txt", "r") as myfile: 
    data = myfile.read().replace('\n', '') 
    print(data) 
    for Symbol in data: 
     freq = (freq + 1) 
print(freq) 

답변

3

: 이것은 단지 Symbol에 파일의 각 문자를 할당

for Symbol in data: 

를 다음 수를 증가 . 대신

사용 str.count() :

with open ("words.txt", "r") as myfile: 
    data = myfile.read().replace('\n', '') 
    print(data) 
    freq = data.count(Symbol) 
    print(freq) 

또는, 당신은 루프를 사용해야하는 경우, 각 문자 테스트 : 당신이 고려할 수있는 큰 입력 파일의 경우

with open ("words.txt", "r") as myfile: 
    data = myfile.read().replace('\n', '') 
    print(data) 
    freq = 0 
    for char in data: 
     if char == Symbol: 
      freq = freq + 1 
    print(freq) 
+0

대단히 감사합니다. – user3469594

1

collections.Counter

from collections import Counter 

def countsymbols(filename,symbols): 
    """Counts the symbols in `filename`. 
`symbols` is an iterable of symbols""" 
    running_count = Counter() 

    with open(filename) as f: 
     for line in f: 
      running_count += Counter(line.strip()) 

    return {key:value for key,value in running_count.items() if key in symbols} 

symbols = map(str.strip,input("Enter symbols: ").split()) 
filename = input("Filename: ") 

symbolcount = countsymbols(filename,symbols) 
+1

성능 비교 : [Python - 각 문자의 빈도를 찾는 데 느린 사전입니까?] (http://stackoverflow.com/q/2522152/4279) – jfs

관련 문제