Perl转Python:根据输入字符串匹配文件内容输出问题求助
解决方案
你的问题在于当前代码仅判断输入的星座名是否存在于文件中,没有提取对应星座的具体描述内容。解决这个问题需要根据sunsigns.txt的实际格式来调整代码,以下是两种常见文件格式的处理方案:
情况1:文件每行格式为「星座名: 描述内容」
如果你的文件是每行对应一个星座的信息,比如:
Aries: 白羊座是火象星座,性格热情开朗,充满行动力。 Taurus: 金牛座是土象星座,性格沉稳务实,注重物质与安全感。
可以用逐行读取并匹配的方式:
def SunSign(): print("\n\nYou want to know more about your Sun Sign!\n") print("Your sun sign is your core identity and probably the sign that you are most familiar with as it is your zodiac!\n\n") sun = input("What is your Sun Sign?\n").strip() # 去除输入前后空格 with open("sunsigns.txt", "r") as file: for line in file: line = line.strip() # 检查行是否以输入的星座名开头,并且包含分隔符 if line.startswith(f"{sun}:"): # 分割出描述内容并打印 description = line.split(":", 1)[1].strip() print(f"{sun}: {description}") break else: # 循环正常结束(没break)说明没找到匹配项 print(f"Sorry, no information found for {sun}.") Restart()
情况2:文件按区块存储星座信息
如果文件中每个星座的信息是独立区块,比如:
Aries 白羊座是火象星座,性格热情开朗,充满行动力。 他们热爱冒险,总是第一个尝试新事物。 Taurus 金牛座是土象星座,性格沉稳务实,注重物质与安全感。 他们对生活品质有较高的要求,做事脚踏实地。
可以用正则表达式匹配整个区块:
import re def SunSign(): print("\n\nYou want to know more about your Sun Sign!\n") print("Your sun sign is your core identity and probably the sign that you are most familiar with as it is your zodiac!\n\n") sun = input("What is your Sun Sign?\n").strip() with open("sunsigns.txt", "r") as file: content = file.read() # 正则匹配:星座名开头,后面跟着非空行,直到下一个星座名或文件结束 pattern = re.compile(rf"^{sun}\n(.*?)(?=\n[A-Z][a-z]+|\Z)", re.DOTALL | re.MULTILINE) match = pattern.search(content) if match: description = match.group(1).strip() print(f"{sun}\n{description}") else: print(f"Sorry, no information found for {sun}.") Restart()
关键说明
- 两种方案都添加了输入空格处理(
strip()),避免用户输入前后空格导致匹配失败 - 都包含了未找到匹配项的提示,提升用户体验
- 正则方案中的
re.DOTALL让.匹配换行符,re.MULTILINE让^匹配每行开头
内容的提问来源于stack exchange,提问作者alyssamich
相关产品推荐
相关产品推荐

