如何在一行代码中包含.isupper()和.islower()方法?

时间:2019-05-09 16:21:57

标签: python python-3.x

正在处理一些代码,该代码读取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

4 个答案:

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

islowerisupper仅返回关于字符串是否小写的布尔值。您需要一个将字符串 转换 大写的函数。即,具有写入/功能的功能,而不仅仅是读取。使用str.lower()str.upper()