Python在一定条件下计算单词数
我试图获取每行的第二个单词,但前提是csv中的第二个最后一个数字为0,并计算每个单词在csv文件中出现的次数 数据: 迄今为止的代码: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
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(),用于有效行中的行))