2017-07-27 79 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

相关问题