2014-11-20 2 views
0

줄 단위로 텍스트 파일을 읽고 행의 각 그룹 그룹의 발생 횟수를 확인하려고합니다. 예. 텍스트 파일 (다름)이 라인문자열 그룹이 발생한 횟수를 계산하고 파이썬에서 문자열과 발생 횟수를 인쇄합니다. 2.7

X_0_Gui_Menu_400_Menu_System 
X_0_Gui_Menu_400_Menu_System 
X_0_Gui_Menu_000_Menu_root 
X_0_Gui_Menu_000_Menu_root 
X_0_Gui_Menu_000_Menu_root 
X_0_Gui_Menu_300_Menu_Outputs 
X_0_Gui_Menu_300_Menu_Outputs 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 

는 내가 수를 사용하여 일부 포럼을 보았다

X_0_Gui_Menu_400_Menu_System 
2 times 

X_0_Gui_Menu_000_Menu_root 
3 times 

X_0_Gui_Menu_300_Menu_Outputs 
2 times 

X_0_Gui_Menu_320_Menu_Outputs_SDI 
8 times 

의 출력을 좀하고 싶습니다 포함하지만 데이터에있을 것입니다 무엇을 잘 모릅니다 파일을 검사 할 입력을 제공하지만 완전히 무작위입니다. 그래서 이것을 구현하는 방법을 혼란 스럽습니다. 어떤 안내라도 도움이 될 것입니다.

답변

0

collection module의 카운터 컨테이너를 사용하여이 작업을 수행 할 수 있습니다. Python 문서에서 : "카운터는 해시 가능 객체를 계산하기위한 dict 하위 클래스이며 요소가 사전 키로 저장되고 카운트가 사전 값으로 저장되는 정렬되지 않은 콜렉션입니다. 카운트는 0 또는 음수를 포함한 모든 정수 값이 될 수 있습니다 Counter 클래스는 다른 언어의 가방이나 멀티 세트와 유사합니다. "

다음은 사용자가 요구하는 샘플 코드입니다. 필자는 파일이 Counter 개체를 만드는 반복자라는 사실을 사용했습니다. 반복 할 때 파일에서 각 줄을 산출하지만 줄 바꿈 문자는 제거하지 않으므로 strip() 메서드를 사용하여 제안한 출력을 얻습니다. 인쇄 '으로이 기능을 실행하는 동안

filename = 'test.txt' 

filetxt = """\ 
X_0_Gui_Menu_400_Menu_System 
X_0_Gui_Menu_400_Menu_System 
X_0_Gui_Menu_000_Menu_root 
X_0_Gui_Menu_000_Menu_root 
X_0_Gui_Menu_000_Menu_root 
X_0_Gui_Menu_300_Menu_Outputs 
X_0_Gui_Menu_300_Menu_Outputs 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
X_0_Gui_Menu_320_Menu_Outputs_SDI 
""" 

with open(filename, 'w') as f: 
    f.write(filetxt) 

from collections import Counter 
with open(filename, 'r') as f: 
    c = Counter(f) 

# use iteritems() in python 2.7 instead of items 
for key, value in c.items(): 
    print(key.strip()) 
    print('{:d} times'.format(value)) 
+0

와우! .. 이것은 내 하루를 간단하고 효과적으로 만들었습니다. 감사 :) – user89

0
file = open('test.txt') 
fileLines = file.read().split('\n') 
list = [] 

for line in fileLines : 
    for tup in list: 
     if tup[0] == line: 
       list[list.index(tup)][1] = list[list.index(tup)][1] + 1 
       break 
    else: 
     list.append([line, 1]) 

for s in list: 
    print(s[0] + ' ' + str(s[1])) 

파일의 내용을 읽어야합니다. 줄이 목록에 없으면 문자열과 개수로 구성된 튜플을 목록에 추가합니다. 라인이 존재하면, 적절한 튜플의 카운트에 1을 더합니다.

+0

안녕, I는 오류 (S [0] +'STR '+ S [1]) 형식 오류 연결할 수없는'과 '내부' – user89

+0

@VenkateshPadmanabhan을 objects' 예, 미안 해요. 나는 내 코드를 확인하지 않았다. 방금 디버깅했습니다. 이제 작동합니다. 업데이트 된 코드를 사용해보십시오. – mstagg

+0

답장을 보내 주셔서 감사합니다. 업데이트 된 코드를 사용해 보았습니다. 하지만 여전히 제대로 작동하지 않습니다. '난 그냥 문자열 0 10_Gui_Menu_409_Menu_System_Sensor 20_Gui_Menu_400_Menu_System 50_Gui_Menu_000_Menu_root에게 14_Gui_Menu_300_Menu_Outputs 20_Gui_Menu_320_Menu_Outputs_SDI 23_Gui_Menu_310_Menu_Outputs_EVF_mon 10_Gui_Menu_312_Menu_Outputs_EVF_exptools 20_Gui_Homescreen_Homescreen 40_Gui_Homescreen_WB_Switchview 50_Gui_Homescreen_WB_List 1 ' 그것은 나에게 내가 당신에게 모르는 카운트 – user89

관련 문제