我对这个论坛、编程和 Python 都是新手。我正在尝试开发我的第一个程序,但是在一个特定问题上我不断遇到障碍。我希望某种鞋底能让我摆脱痛苦并告诉我如何正确地做我想做的事情。我相信如果你知道自己在做什么的话这很简单,但目前我很愚蠢并且不知道我在做什么:-)
示例:
我需要处理 2 个文件,A 和 B
文件 A 包含文本:
This is a test
文件 B 包含文本:
h
t
s
i
a
我需要创建一个程序,每次从文件 A 中抓取 1 个字符,然后搜索文件 B 寻找相同的字符。一旦程序找到匹配项,我希望它打印找到匹配项的行号,然后继续从文件 A 中抓取另一个字符并重复此过程直到 EOF。
最佳答案
好的,让我们一步一步地进行。首先,我会将文件 B
读入一个非常适合快速查找的结构,因为我们将经常这样做:
chars = {}
with open("B") as lookupfile:
for number,line in enumerate(lookupfile):
chars[line.strip()] = number
现在我们有一个字典chars
,其中包含字母作为键,其行号作为值:
>>> chars
{'t': 1, 'a': 4, 'i': 3, 'h': 0, 's': 2}
现在我们可以迭代第一个文件。文件的标准 Python 迭代器每次迭代消耗一行行,而不是一个字符,因此最好将整个文件读入一个字符串,然后对其进行迭代(因为对于字符串,迭代是逐个字符的):
with open("A") as textfile:
text = textfile.read()
现在我们迭代字符串并打印匹配值:
for char in text:
if char in chars:
print("Character {0} found in row {1}".format(char, chars[char]))
如果您不喜欢两次访问字典,也可以使用
for char in text:
found = chars.get(char): # returns None if char isn't a key in chars
if found:
print("Character {0} found in row {1}".format(char, found))
或者,使用异常:
for char in text:
try:
print("Character {0} found in row {1}".format(char, chars[char]))
except KeyError:
pass
关于Python 循环中字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134024/