Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在一定条件下计算单词数_Python - Fatal编程技术网

Python在一定条件下计算单词数

Python在一定条件下计算单词数,python,Python,我试图获取每行的第二个单词,但前提是csv中的第二个最后一个数字为0,并计算每个单词在csv文件中出现的次数 数据: 迄今为止的代码: words= [] with open('the_file.csv', 'rb') as csvfile: reader = csv.reader(csvfile) reader.next() for row in reader: csv_words = row[1].split(";") for i

我试图获取每行的第二个单词,但前提是csv中的第二个最后一个数字为0,并计算每个单词在csv文件中出现的次数

数据:

迄今为止的代码:

words= []
with open('the_file.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile)
    reader.next()
    for row in reader:
         csv_words = row[1].split(";")
         for i in csv_words:
              words.append(i)

当您当前检查字符串的元素
1
时,需要调整检查最后一个字段值的方式,即
然后继续按
进行拆分

test = '0;London ;10-05-2019 08:50:00;0;9'
>>> test[1].split(';')
['', '']
关于计算单词,在这里使用字典而不是列表将提供一个更简单的解决方案

放大文件

0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;2;9
0;London ;10-05-2019 08:50:00;3;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;Sydney ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
代码

输出

{'London': 5, 'Sydney': 1}
注意,如果最后一个元素可能不是整数,则需要将
if语句
更改为
try/catch
子句,或者将0转换为
str

if data[3] == str(0):

当您当前检查字符串的元素
1
时,需要调整检查最后一个字段值的方式,即
然后继续按
进行拆分

test = '0;London ;10-05-2019 08:50:00;0;9'
>>> test[1].split(';')
['', '']
关于计算单词,在这里使用字典而不是列表将提供一个更简单的解决方案

放大文件

0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;2;9
0;London ;10-05-2019 08:50:00;3;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;Sydney ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
代码

输出

{'London': 5, 'Sydney': 1}
注意,如果最后一个元素可能不是整数,则需要将
if语句
更改为
try/catch
子句,或者将0转换为
str

if data[3] == str(0):

将拆分更改为在整行上进行,而不是仅在第三个字符(行[3])。拆分(“;”)更改为行。拆分(“;”)


将拆分更改为在整行上进行,而不是仅在第三个字符(行[3])。拆分(“;”)更改为行。拆分(“;”)


您可以大大简化代码并实现相同的目标。我使用了collections中的计数器模块来简化这个过程

示例CSV。在最后一列的第二行中添加了第四行和1,以确保我的答案不包括这一点

0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;1;9
0;London ;10-05-2019 08:50:00;0;9
0;Tampa ;10-05-2019 08:50:00;0;9
0;Tampa ;10-05-2019 08:50:00;0;9
0;Tampa ;10-05-2019 08:50:00;0;9
代码:

输出:

Counter({'London ': 4, 'Tampa ': 3})
我所做的事情:

1) 添加了分隔符
读卡器
读卡器=csv.reader(csvfile,分隔符=';')

2) 将最后第二个元素强制转换为列表中的
int
,以检查是否为0,即
如果int(行[-2:[0])==0:

3) 使用
计数器
模块从列表
单词

Counter
dict
的一个子类,因此您可以以类似于字典的方式使用
计数器

较短版本

您可以使用以下代码避免列出
单词

import csv
from collections import Counter

word_count = Counter()
with open('the_file.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        if int(row[-2:][0])== 0:
            word_count.update([row[1]]) 

print(word_count)  
输出:

Counter({'London ': 4, 'Tampa ': 3})

您可以大大简化代码并实现相同的目标。我使用了collections中的计数器模块来简化这个过程

示例CSV。在最后一列的第二行中添加了第四行和1,以确保我的答案不包括这一点

0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;0;9
0;London ;10-05-2019 08:50:00;1;9
0;London ;10-05-2019 08:50:00;0;9
0;Tampa ;10-05-2019 08:50:00;0;9
0;Tampa ;10-05-2019 08:50:00;0;9
0;Tampa ;10-05-2019 08:50:00;0;9
代码:

输出:

Counter({'London ': 4, 'Tampa ': 3})
我所做的事情:

1) 添加了分隔符
读卡器
读卡器=csv.reader(csvfile,分隔符=';')

2) 将最后第二个元素强制转换为列表中的
int
,以检查是否为0,即
如果int(行[-2:[0])==0:

3) 使用
计数器
模块从列表
单词

Counter
dict
的一个子类,因此您可以以类似于字典的方式使用
计数器

较短版本

您可以使用以下代码避免列出
单词

import csv
from collections import Counter

word_count = Counter()
with open('the_file.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        if int(row[-2:][0])== 0:
            word_count.update([row[1]]) 

print(word_count)  
输出:

Counter({'London ': 4, 'Tampa ': 3})
计数器对象(在集合中)将为您完成所有工作:

from collections import Counter
with open('the_file.csv', 'rb') as csvfile:
    words = Counter(word.strip() for _,word,_,flag,_ in csv.reader(csvfile, delimiter=';') if flag == "0")

words["london"] # ---> number of times london was found
计数器对象(在集合中)将为您完成所有工作:

from collections import Counter
with open('the_file.csv', 'rb') as csvfile:
    words = Counter(word.strip() for _,word,_,flag,_ in csv.reader(csvfile, delimiter=';') if flag == "0")

words["london"] # ---> number of times london was found

代码有什么问题吗?嘿,Tom,包括您当前获得的输出以及一些更多的示例数据可能是值得的。您可以通过添加
delimiter=';”来节省一些代码在读卡器声明中。
有效的_行=过滤器(lambda l:l.split(“;”)[-2]!=“0”,行);打印(collections.Counter(line.split(“;”[1].strip(),用于有效的_行中的行))
代码有什么问题吗?嘿,Tom,包括您当前获得的输出以及一些示例数据可能会有好处。您可以通过添加
delimiter=';”来节省一些代码在读卡器声明中。
有效的_行=过滤器(lambda l:l.split(“;”)[-2]!=“0”,行);打印(collections.Counter(line.split(“;”)[1].strip(),用于有效行中的行))