2016-11-09 50 views
0

低得多的單詞計數我試圖完成NaNoWriMo涉及跟蹤您的單詞計數,以滿足編寫50,000字的目標。我一直在做這樣使用Python腳本:猛砸WC報告比的LibreOffice和谷歌文件

import glob 
def count_words(ftype): 
    wordcount = 0 
    for found_file in glob.glob(ftype): 
     with open(found_file, 'r') as chapter: 
      for line in chapter: 
       if line.strip(): 
        words = line.split(' ') 
        wordcount += len(words) 
    return wordcount 

>>> count_words('*md') 
14696 

不過,我剛剛意識到,猛砸「WC」命令(我剛剛得知)不同意:

~/nano$ wc *md -w 
2656 ch01.md 
    438 ch02.md 
2112 ch03.md 
1246 ch04.md 
2367 ch05.md 
2131 ch06.md 
1406 ch07.md 
1060 ch08.md 
    21 rules.md 
13437 total 

所以WC報告的總字數僅爲13,437字。

該死的,我後面!這是怎麼回事?順便說一句,LibreOffice和Google Sheets同意bash,所以我將它標記爲一個Python問題,因爲我非常確定問題出在我的腳本上。

+0

什麼格式您編寫這些文檔?如果它不是純文本或像markdown那樣輕量級,'wc'不會給你一個準確的數字。假設您嘗試計算.docx文件....其壓縮的xml,而不是文字。 – tdelaney

+0

Markdown。 [詳細字符] –

回答

0

想通了:它是在該行作爲一個單獨的單詞的末尾計數\ n字符(因爲我抵消它的空間該行的最後一個字和下的第一個字之間去) 。

好吧,至少我發現得早......

更新代碼:

import glob 
def count_words(ftype): 
    wordcount = 0 
    for found_file in glob.glob(ftype): 
     with open(found_file, 'r') as chapter: 
      for line in chapter: 
       line = line.strip() 
       if line: 
        words = line.split(' ') 
        wordcount += len(words) 
    return wordcount 

>>> count_words('*md') 
13895 
+1

你會發現'詞語= re.findall(R '\ W +',線)'更精確的靜止。它將跳過換行符的其他markdown格式。 – tdelaney

+1

僅使用不帶參數的'line.split()'通常是單獨的單詞。 請參閱從[這裏]答案(http://stackoverflow.com/questions/19410018/how-to-count-the-number-of-words-in-a-sentence)張貼的方式來做到這一點。 –

+0

你有多少人認爲我想讓自己失去自我? ;) –