*********************************** SOLUTION *********** *****************
经过大量的测试和一些调整后,我设法编写了一个有效的代码!
我与所有人分享,以防有人有兴趣执行我所拥有的相同的事情。 对每个帮助过的人 - 谢谢! :)
stringToSearchIn = open('FileName.py').read()
def findBetween(file, firststring, laststring, findstring):
start = 0
countfinal = 0
while True:
try:
start = file.index(firststring, start)
except:
break
try:
end = file.index(laststring, start)
count = file[start:end].count(findstring)
countfinal = count + countfinal
start = end
except:
break
return countfinal
print findBetween(stringToSearchIn, "example", "file", "letters")
*********************************结束解决方案************ ***************
我一直试图解决这个问题已经有一段时间了,我相信我在脑海中复杂的事情。 我写作甚至有点复杂,但我会尽我所能。如果事情不清楚,请随意提问!
请不要为我编写代码。我在这里学习,而不是复制:)
例如:
#This is the entire text I want to scan
s = open('test.py').read()
#I want to go through the entire file and find the string between these two strings:
stringStartToSearch = "example"
stringEndToSearch = "file"
#Next, I want to count the number of times a certain string is located
#between the previously found string.
stringSearch = "letters"
为了进一步说明,让我们说这是" test.py"中的字符串。文件:
#An example text that I have many letters in, just to give and example for a file.
#It's an example with many letters that I made especially for this file test.
#And these are many letters which should not be counted
如您所见,单词"字母"可以在这个文件中找到3次,但只有2次"例如"和"文件" 。这就是我想要的数字。
有没有人知道有效的pythonic方法来实现这一目标?
非常感谢!
为了你sabbahillel
脚本确实在2个给定字符串之间找到正确的字符串,但是在找到它之后停止。我需要它来继续搜索整个文件,而不是在它找到后停止。 此外,在我找到这两个字符串之间的字符串后,我需要通过它来计算某个单词的显示次数。用这个命令可以实现吗?
file = open('testfile.py').read()
def findBetween(file, firstWord, secondWord):
start = file.index(firstWord)+len(firstWord)
end = file.index(secondWord, start)
return file[start:end]
print findBetween(file, "example", "file")
答案 0 :(得分:1)
我们假设您已经提供了字符串列表。
list.index(x)的
返回值为x的第一个项目列表中的索引。如果没有这样的项目,则会出错。
获取开始的索引和结束的索引。如果begin和end都存在且end的索引大于start的索引,则只需使用start和end索引上的范围来获取所需的元素。
当然,您必须进行相应的错误检查,并决定如果您有一个开始指示符但要到达列表末尾没有结束指示符该怎么办(作为必须处理的错误情况的示例) )
请注意,list.index()会查找起始字符串的第一个匹配项。如果还有更多,则在结束字符串第一次出现时启动范围并再次执行。这可以在适当的do ... while
循环中完成,其中while检查是否有另一个出现的起始字符串。
请注意,如果列表中出现另一个起始字符串,则不会将其视为重置开始,而只是另一个条目。
mylist = ('string' 'start' 'string' 'start' 'string' 'end' 'string)
将处理
('start' 'string' 'start' 'string' 'end')
因此我们现在有了
start = 0
while True:
try:
start = mylist[start:].index(firststring)
except:
# index did not find start string. nothing to do, force exit
break
try:
end = mylist[start:].index(laststring)
count = mylist[start:end].count(findstring)
# process findstring
start = end # set up for the next loop
except:
# index did not find end string but did find start
count = mylist[start:].count(findstring)
# process findstring
break # reached the end of the list, exit the while
现在你有了开始和结束索引
索引,切片和矩阵
因为列表是序列,所以索引和切片对列表的工作方式与对字符串的工作方式相同。所以只需使用list [a:b] .count(string)和相应的切片指示符..
list.count(OBJ)
返回列表中obj出现次数的计数
答案 1 :(得分:0)
使用regexp进行查找:
import re
example = """An example text that I have many letters in, just to give and example for a file.
It's an example with many letters that I made especially for this file test.
And these are many letters which should not be counted"""
found_lines = re.findall('.+example.+letters.+file.+', example)
result = {}
for line in found_lines:
example_word = line.find('example') + len('example')
file_word = line.find('file', example_word)
result[line] = file_word - example_word
print result