2017-07-27 72 views
0

我在一列中有一個csv文件,如下所示。符號和數字僅用於表明文件不僅包含文本。我有兩個目標:在csv中計算單詞出現並確定行外觀

  1. 計算一個單詞的出現次數;
  2. 確定一個字有多少行出現在

Stuff 
I like apples. Sally likes apples. 
Jim has 4 berries. [email protected]# 
John has 2 apples. 

理想情況下,代碼應該返回類似: {蘋果:3} {#行:2}

我已經編寫了一些代碼來嘗試和計算出現次數,但它沒有正常運行(假設是因爲標點符號)。另外,我不知道如何確定單詞出現的行數;這可以像計算每行中唯一出現的次數一樣簡單,但我不確定如何繼續。下面是代碼我迄今,在Python 3.6.1完成:

import csv 
my_reader = csv.reader(open('file.csv', encoding = 'utf-8')) 
ctr = 0 
for record in my_reader: 
    if record[0] == 'apples': 
     ctr += 1 
print(ctr) 

的代碼只是返回0的答案。幫幫我?

+0

'打印(記錄)'的循環,看看什麼東西被放在它。您可以使用['str.find()'](https://docs.python.org/3/library/stdtypes.html#str.find)方法在字符串中搜索子字符串。或者,您可以使用['str,split()'](https://docs.python.org/3/library/stdtypes.html#str.split)方法將字符串分解爲單獨的「單詞」,使用空格('''')作爲分隔符。 – martineau

+0

'print(record)'將文件的最後一行作爲'['John有2個蘋果'']'返回,即它看起來像忽略了其他行。 – Mat

+0

也許不是。你把'print' **放在循環中了嗎?否則,您可能只是獲取最後顯示的記錄。 – martineau

回答

0

您正在比較是否row == 'apple,您需要的是if 'apple' in row。並計算你可以使用str.count()的發生,例如:

import csv 
my_reader = csv.reader(open('file.csv', encoding = 'utf-8')) 
ctr = 0 
rows = 0 
for record in my_reader: 
    if 'apples' in record[0]: 
     rows += 1 
     ctr += record[0].count('apples') 

print('apples: {}, rows: {}'.format(ctr, rows)) 

這樣,您將檢查row包含​​那麼你遞增一rows,並通過在row的​​數量增加ctr

0
import collections 
import csv 

occurrences = collections.defaultdict(lambda: collections.Counter()) 
with open('path/to/file') as infile: 
    for r,row in enumerate(csv.reader(infile)): 
     r = (r,) 
     for word in (w for col in row for w in col.split()): 
      occurrences[word].update(r) 

for word,occs in occurrences.items(): 
    print("{} appears {} times on {} rows".format(word, sum(occs.values()), len(occs))) 
+0

'occurrences = collections.defaultdict(collections.Counter)'也沒有工作量開銷。 – martineau

+0

@ inspectorG4dget,我也嘗試了你的解決方案,但是我得到了一個「無效的語法」與'枚舉'錯誤。我正在使用OS X,如果這很重要...... – Mat

+0

@Mat:應該是'r,在枚舉行(csv.reader(infile)):'。 – martineau

0

我不知道你爲什麼使用csv閱讀器,因爲你沒有使用任何csv文件。

這是一個代碼,將使用更少的代碼來做你所需要的。

my_reader = open('file.csv', encoding = 'utf-8') 
rows = 0 
apples = 0 

for record in my_reader: 
    if record.count('apple') > 0: 
     rows += 1 
     apples += record.count('apple') 

print('{apples: %d } {# of rows: %d }' % (apples, rows)) 

下面是代碼運行: https://repl.it/JkVn/1

+0

我正在閱讀一個CSV文件,所以不確定你的意思。另外,如果我將文件開放行中的參數''r'更改爲'encoding ='utf-8'',它會運行,謝謝您的輸入;用'r',shell會返回一個unicodedecode錯誤。 – Mat

+0

您與我們分享的文件只是一個帶有csv擴展名的簡單txt文件。一個csv文件是一個電子表格文件,這裏是維基百科頁面,顯示它是如何形成的https://en.wikipedia.org/wiki/Comma-separated_values。 –

+0

是的,我知道csv文件是什麼,但不知道如何粘貼文件,而沒有拍攝屏幕截圖,所以我只是手動輸入來自csv文件的條目。你的代碼適用於小編輯,所以不用擔心。 – Mat

相關問題