正在处理一些代码,该代码读取csv文件并获取用户寻找的searchWord的计数。该功能不应区分大小写,因此,如果用户要查找单词:trampoline,它将捕获TRAMPOLINE,Trampoline等。
我想知道是否可以在同一参数中添加.isupper()和.islower()来简化代码?我感觉到自己在做其他错误。只是很难找出是什么。
例如.csv文件中
I have 12 trampolines. The TRAMPOLINES are round and have netting
surrounding them.
Trampolines are my favorite activity.
我尝试在单独的代码行中同时添加这两种方法,但遇到意外的输出。
def countingWords(word):
openFile= open('file.csv', 'r')
contents = openFile.read()
openFile.close
counter = 0
for separateLines in contents.split():
if str(word) in separateLines:
counter += 1
elif str(word).isupper():
counter += 1
elif str(word).islower():
counter += 1
return count
当前,如果用户输入:countingWords('Trampoline'),则输出将仅为1,应为3
答案 0 :(得分:2)
将文件中的目标词和文本行都转换为小写:
for separateLines in contents.split():
if word.lower() in separateLines.lower():
counter += 1
答案 1 :(得分:0)
也许这是矫kill过正,但是您可以使用正则表达式。为什么?它可能比拆分和循环快一些(并不是说它不在幕后发生)。尽情享受-我在下面写了一个小片段!
import re
data = """
I have 12 trampolines. The TRAMPOLINES are round and have netting
surrounding them.
Trampolines are my favorite activity.
"""
def count_instances(data, word):
res = re.findall('.?{}.?'.format(word.lower()), data, flags=re.IGNORECASE)
print(res)
return len(res)
print(count_instances(data, 'trampolines'))
答案 2 :(得分:0)
这是一个使用列表理解来获取示例文本中单词出现频率的答案。
P.S。可以修改此代码以使用您的CSV文件。
from pprint import pprint
input_text = """
I have 12 trampolines. The TRAMPOLINES are round and have netting
surrounding them.
Trampolines are my favorite activity.
"""
wordfreq = Counter([word.lower().rstrip('.') for word in input_text.split()])
pprint (wordfreq)
# outputs
Counter({'trampolines': 3,
'have': 2,
'are': 2,
'i': 1,
'12': 1,
'the': 1,
'round': 1,
'and': 1,
'netting': 1,
'surrounding': 1,
'them': 1,
'my': 1,
'favorite': 1,
'activity': 1})
答案 3 :(得分:0)
islower
和isupper
仅返回关于字符串是否小写的布尔值。您需要一个将字符串 转换 大写的函数。即,具有写入/功能的功能,而不仅仅是读取。使用str.lower()
和str.upper()