计算 csv 中的单词出现次数并确定行出现次数
Counting word occurrences in csv and determine row appearances
我在一栏中有一个 csv 文件,如下所示。符号和数字只是为了表明该文件不仅仅包含文本。我有两个目标:
- 计算一个词出现的次数;
- 确定一个词出现在多少行。
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
我在一栏中有一个 csv 文件,如下所示。符号和数字只是为了表明该文件不仅仅包含文本。我有两个目标:
- 计算一个词出现的次数;
- 确定一个词出现在多少行。
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