计算 csv 中的单词出现次数并确定行出现次数

Counting word occurrences in csv and determine row appearances

我在一栏中有一个 csv 文件,如下所示。符号和数字只是为了表明该文件不仅仅包含文本。我有两个目标:

  1. 计算一个词出现的次数;
  2. 确定一个词出现在多少行。

Stuff
I like apples. Sally likes apples.
Jim has 4 berries.  !@#
John has 2 apples.

理想情况下,代码应该 return 类似于: {苹果: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)

代码只是returns 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 是否包含 apples 然后您将 rows 递增 1 并将 ctr 递增 apples 的数量row.

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)))

我不知道你为什么要使用 csv reader,因为你没有使用任何 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