2016-05-13 108 views
0

我已經堆疊在我的Python腳本中,嘗試打開.txt文件,從該文件中創建單詞列表,計算單詞出現次數(Counter)並將其放入在.csv文件中。我的文件從1870.txt - 1892(1871,1872,1873..1892.txt)獲得了名稱。一切從那裏工作,但我希望每個文件放在下一列。Python在.CSV文件中創建新列和存儲數據

def putInExcel(outputt): 
    i = 1790 
    while i < 1892: 
     inputt = str(i) + '.txt' #Making text file name 

     writefile = open(outputt) 
     writer = csv.writer(writefile) 

     with open(inputt) as file:  #Separating each word and storing in list 
      text = file.read().lower() 
      text = re.sub('[^a-z\ \']+', " ", text) 
      words = list(text.split()) 

      for word in words: 
       cnt[word] += 1 
      for key, count in cnt.iteritems(): #De-dent this block 
       writer.writerow([key,count]) #Output both the key and the count 

     writefile.close() 
     i = i+1 

此腳本正在工作,但它將所有內容存儲在一列中。 有沒有人有一些想法?謝謝!

回答

0

如果我理解正確,您需要一個包含每個年份/文件名的列的表。在每一列中,您都需要數字頻率計數。最左邊一列是文字本身:

____  | 1790 | 1791 | 1792 | ... 
Aachen  1  1  2 
aardvark  1  0  0 
aardwolf  0  1  0 
abacus  1  2  2 
acrimony  2  2  2 
    : 

你有一個相當簡單的腳本現在,不擔心不同的數據集之間的相互作用。當您嘗試處理多個輸入列表時,您將不得不以某種方式「統一」它們。這就是爲什麼我在示例中顯示0的一些條目。

我的建議是保持所有看到的單詞setdictionary。完成後,這將是最左邊的一列。

對於每年/輸入文件,您可以保留單獨的計數。你可以將它們作爲兩個平行的列表:年/文件名,並計數的詞典:

All_words = set() 
Headers = []  # 1791, 1792, ... 
Word_counts = [] # {'a':1, 'baa':2}, {'a':1, 'abacus': 1}, ... 

現在,當你遍歷所有的文件,添加文件名和一個空的字典到頁眉/計數名單:

for ... 1791 ... 
    Headers.append(year) 
    cnt = dict() 
    Word_counts.append(cnt) 

按照現在的方法計算您的單詞。但是,當你算一個的話,也將其添加到組的所有詞:

 cnt[word] += 1 
     All_words.add(word) 

最後,當你完成,你將不得不處理在同一順序的話。所以排序的All_words的內容和使用:

row = ['Word\Year'] 
row.extend(Headers) 
csvfile.writerow(...) 

for word in sorted(All_words): 
    row = [word] # Left column is word 
    row.extend([yr.get(word, 0) for yr in Word_counts]) 
    csvfile.writerow(...)    
+0

這正是我所期待的!但我正試圖理解並連接代碼 – Ukii

+0

我不明白'...'對於... 1791的含義... ...。對不起,但我很難從一個代碼移動到另一個:) – Ukii

+0

這意味着「無論你需要放在這裏」。我試圖弄清楚它在什麼環路中。 –