Python 返回以大写字母开头的文件中的最后一个单词

Python 返回以大写字母开头的文件中的最后一个单词,python,Python,我试图制作一个简单的脚本,为最后一个以大写字母开头并返回的单词指定一个.txt文件。如果没有以大写字母开头的单词,则返回空字符串 这就是我迄今为止所尝试的: def find_last_capitalised(file_name): with open(file_name) as wordfile: text_str = wordfile.read() word_list = text_str.split() upper = "ABCDEF

我试图制作一个简单的脚本,为最后一个以大写字母开头并返回的单词指定一个.txt文件。如果没有以大写字母开头的单词,则返回空字符串

这就是我迄今为止所尝试的:

def find_last_capitalised(file_name):
    with open(file_name) as wordfile:
        text_str = wordfile.read()
        word_list = text_str.split()
        upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        for word in word_list:
            if word.rfind(upper):
                return word
            else:
                return " "
但这不起作用

我也试过:

    with open(file_name) as wordfile:
        text_str = wordfile.read()
        word_list = text_str.split()
        for word in word_list:
            if word_list[-1].isupper():
                return word_list[-1]
            else:
                return " "
有什么帮助吗?

看来您需要帮助

例:

看来你需要换个方向

例:

您需要在第一次失败时返回。这就是为什么你没有得到预期的结果

def find_last_大写文件名: 使用openfile_名称作为wordfile: text\u str=wordfile.read word\u list=文本\u str.split 对于反向单词列表中的单词: 如果单词[0]。为上限: 回信 回来 然而,若您的文件大得多,您可能希望以相反的顺序读取文件。这会让你更容易找到你想要的东西

导入操作系统 def find_last_大写文件名: 使用openfile_名称作为wordfile: wordfile.seek0,os.SEEK\u结束 position=wordfile.tell 单词= 当位置>=0时: qfile.seekposition 下一个字符=qfile.read1 如果next_char==: 如果单词[0]。为上限: 回信 单词= 其他: word+=下一个字符 位置-=1 回来 我建议使用类似的方法来解决您的问题。

您需要在第一次失败时返回。这就是为什么你没有得到预期的结果

def find_last_大写文件名: 使用openfile_名称作为wordfile: text\u str=wordfile.read word\u list=文本\u str.split 对于反向单词列表中的单词: 如果单词[0]。为上限: 回信 回来 然而,若您的文件大得多,您可能希望以相反的顺序读取文件。这会让你更容易找到你想要的东西

导入操作系统 def find_last_大写文件名: 使用openfile_名称作为wordfile: wordfile.seek0,os.SEEK\u结束 position=wordfile.tell 单词= 当位置>=0时: qfile.seekposition 下一个字符=qfile.read1 如果next_char==: 如果单词[0]。为上限: 回信 单词= 其他: word+=下一个字符 位置-=1 回来 我建议使用类似的方法来解决您的问题。

您可以尝试使用反向和is_upper关键字:

def find_last_capitalised(file_name):
    with open(file_name) as wordfile:
        text_str = wordfile.read()
        word_list = text_str.split()
        word_list = reversed(word_list)
        for word in word_list:
            if word[0].isupper():
                return word

print(find_last_capitalised("demo.txt"))
您可以尝试使用反向和is_upper关键字:

def find_last_capitalised(file_name):
    with open(file_name) as wordfile:
        text_str = wordfile.read()
        word_list = text_str.split()
        word_list = reversed(word_list)
        for word in word_list:
            if word[0].isupper():
                return word

print(find_last_capitalised("demo.txt"))

首先,您的算法将返回第一个大写单词,而不是最后一个,因此需要在逻辑上进行一些更改。此外,还提供了检查单词是否大写的最简单方法:

def find_last_capitalised(file_name):
    with open(file_name) as wordfile:
        text_str = wordfile.read()
        word_list = text_str.split()
        last_cap_word = " "
        for word in word_list:
            if word[0].isupper():
                last_cap_word = word

        return last_cap_word

首先,您的算法将返回第一个大写单词,而不是最后一个,因此需要在逻辑上进行一些更改。此外,还提供了检查单词是否大写的最简单方法:

def find_last_capitalised(file_name):
    with open(file_name) as wordfile:
        text_str = wordfile.read()
        word_list = text_str.split()
        last_cap_word = " "
        for word in word_list:
            if word[0].isupper():
                last_cap_word = word

        return last_cap_word

我做了这样的事

进口稀土 图案=[A-Z][A-zA-Z]+ 打开'input.txt','r'作为文件: 对于reversedfile.readlines中的el: res=re.findallpattern,el 如果有的话: printres[-1]
我做了这样的事

进口稀土 图案=[A-Z][A-zA-Z]+ 打开'input.txt','r'作为文件: 对于reversedfile.readlines中的el: res=re.findallpattern,el 如果有的话: printres[-1] 你的算法有点错误。它不会遍历列表中的每个单词,而是根据看到的第一个单词返回。假设将单词列表编入数组,下面的代码应该可以正常工作


你的算法有点错误。它不会遍历列表中的每个单词,而是根据看到的第一个单词返回。假设您将单词列表编成一个数组,下面的代码应该可以正常工作。

其他人为您提供了执行任务的各种方法。我想解释为什么您的第一种方法不能按预期工作:

upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if word.rfind(upper):

str的.rfind方法是查找单词内最后一个子串ABCDEFGHIJKLMNOPQRSTUVWXYZ的位置。我猜您的单词不包含这样的子字符串,在这种情况下.rfind返回-1,根据Python的规则,它的值为True,因为它不是零,因此,它将捕获几乎所有它将给出0或False的单词,仅适用于以abcdefghijklmnopqrstuvxyz开头且仅包含单个abcdefghijklmnopqrstuvxyz的单词。其他人为您提供了执行任务的各种方法。我想解释为什么您的第一种方法不能按预期工作:

upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if word.rfind(upper):
str的.rfind方法是查找单词内最后一个子串ABCDEFGHIJKLMNOPQRSTUVWXYZ的位置。我猜您的单词不包含这样的子字符串,在这种情况下.rfind返回-1,根据Python的规则,它的值为True,因为它不是零,所以它将捕获几乎任何它将给出0或Fal的单词 se仅适用于以ABCDEFGHIJKLMNOPQRSTUVXYZ开头且仅包含单个ABCDEFGHIJKLMNOPQRSTUVXYZ的单词

请尝试使用上述代码。。。如果不起作用,请告诉我


请尝试使用上述代码。。。如果不起作用,请在此处告诉我。

您能提供示例和预期输出吗?您的第二次尝试是查看最后一个单词列表元素,而不是word,但您是在查找单词中的最后一个字母还是第一个字母?您能提供示例和预期输出吗?您的第二次尝试是查看最后一个单词列表元素,不是单词,而是你在寻找单词的最后一个字母还是第一个字母?@Thierrylahuille:我颠倒了列表:word\u list=reversedword\u list为什么你会在返回后打破它?@Thierrylahuille:我颠倒了列表:word\u list=reversedword\u list为什么你会在返回后打破它?脑子里放了一个屁片刻为什么我要放置[0]?它可以工作,但我想不出为什么rn i觉得很笨hahaIt是因为您的单词是字符串,而单词[0]取字符串中的第一个元素字母,即字符。例如,如果您有word='puppy',则单词[0]将是p。isupper只是检查字符是否为大写。此时有一个完整的大脑放屁。为什么我要放置[0]?它可以工作,但我想不出为什么rn i觉得很笨hahaIt是因为您的单词是字符串,而单词[0]取字符串中的第一个元素字母,即字符。例如,如果您有word='puppy',则单词[0]将是p。isupper只是检查字符是否为大写。请欣赏!谢谢你!