Python 返回以大写字母开头的文件中的最后一个单词
我试图制作一个简单的脚本,为最后一个以大写字母开头并返回的单词指定一个.txt文件。如果没有以大写字母开头的单词,则返回空字符串 这就是我迄今为止所尝试的: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
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只是检查字符是否为大写。请欣赏!谢谢你!