2014-05-24 159 views
-2

好的,如果我有一個存儲爲sys.argv [1]的文件,這個文件只有3行,每行包含一個.txt文件的名稱,然後它包含一個貓品種的列表。我想打開sys.argv [1],然後系統地打開與每行sys.argv [1]關聯的每個文本文件。對於每個文本文件,我想創建一個字典,統計每個品種被列出的次數。最後,我想要一個包含所有這些單獨字典的字典,其中每個字典的鍵都是其名稱,如sys.argv [1]文件中所列。這裏是我的嘗試:字典python麻煩

f = open(sys.argv[1], 'r') 
all_cats = {} 
for line in f: 
    w = open(line, 'r') 
    cat_count = {} 
    for line in w: 
     line = line.lower() 
     for mark in string.punctuation: 
      if mark in line: 
       line = line.replace(mark, '') 
     line = line.split() 
     for cat in line: 
      if word not in cat_count: 
       cat_count[cat] = 1 
      else: 
       cat_count[cat] += 1 
     all_cats[line] = cat_count 
    w.close() 
f.close() 

我的預期了認沽將

{'catdictionary#1.txt' : {'long hair': 0, 'short hair' : 1} 'cat dictionary#2.txt' : {'long hair' : 1, 'short hair' : 0}} 
+0

我會把'w = open(line,'r')'改成'w = open(line.rstrip(),'r')'。 –

+0

發佈_minimal_工作示例,或者人們將繼續投票。 – DanielSank

+0

我不能讓一個例子工作是問題 – user3670651

回答

1

你可以嘗試這樣的事情。它爲每個「cat文件」使用專門的Counter類。對於我的樣本數據我有飲料配方:)

#!/usr/bin/env python 

import re, sys 
from collections import Counter 


file_count = dict() 
filenames = [ name.strip() for name in open(sys.argv[1]) ] 

for name in filenames: 
    for line in open(name): 
     cat_count = Counter() 
     for cat in re.sub('[^a-zA-Z ]+', '', line.rstrip()).split(): 
      cat_count[cat] += 1 
     file_count[name] = cat_count 

print file_count 

文件:cats.txt

cat1.txt 
cat2.txt 

文件:cat1.txt

whiskey 
sugar syrup 

文件:cat2.txt

whiskey 

樣品運行:

./countcats.py cats.txt 
{'cat1.txt': Counter({'syrup': 1, 'sugar': 1}), 'cat2.txt': Counter({'whiskey': 1})}