|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
python 第30课最后一题 实在是太难了,既使是看了老师的答案也无法理解.我有如下问题,望前辈不吝赐教:
#函数代码是老师写的,我截取了其中一部分
def pos_in_line(line, key):
pos = []
begin = line.find(key)
while begin != -1:
pos.append(begin + 1) # 用户的角度是从1开始数
begin = line.find(key, begin+1) # 从下一个位置继续查找
return pos
#我的问题是 上面这个while循环是怎么退出的? 是不是在字符串24个字符(下例)全部序列加完之后,begin ==-1了?
str1 = 'fishc小甲鱼fishc小甲鱼fish小甲鱼' #这里总共是24个字符
pos_in_line(str1,'小甲鱼')
out [6, 14, 21]
非常感谢!
本帖最后由 Stubborn 于 2018-12-17 00:09 编辑
- def pos_in_line(line, key): #处理关键字所在行数出现次数函数,文本的一行,关键字 处理关键字在一行出现次数返回一个pos列表
- pos = [] #新建列表
- begin = line.find(key) #查找关键数字是否存在,不存在会返回-1的值
- while begin != -1: #等于-1,则不执行循环
- pos.append(begin + 1) # 用户的角度是从1开始数,编程才是从0开始
- begin = line.find(key, begin + 1) # 从下一个位置继续查找
- return pos #pos是存放了关键字在那行的位置的列表
复制代码
总计一行文本,一个一个查,查到后面总会没有,没有查找到find会返回一个-1的值
这个代码我也看着晕,你看下我的备注把,有什么不懂的问我
- import os
- def print_pos(key_dict): #打印及排序字典函数 key_dict即是 处理好的,关键字所在的行数,和每行出现次数的字典
- keys = key_dict.keys()
- keys = sorted(keys) # 由于字典是无序的,我们这里对行数进行排序
- for each_key in keys:
- print('关键字出现在第 %s 行,第 %s 个位置。' % (each_key, str(key_dict[each_key])))
- def pos_in_line(line, key): #处理关键字所在行数出现次数函数,文本的一行,关键字 处理关键字在一行出现次数返回一个pos列表
- pos = [] #新建列表
- begin = line.find(key) #查找关键数字是否存在,不存在会返回-1的值
- while begin != -1: #等于-1,则不执行循环
- pos.append(begin + 1) # 用户的角度是从1开始数,编程才是从0开始
- begin = line.find(key, begin + 1) # 从下一个位置继续查找
- return pos #pos是存放了关键字在那行的位置的列表
- def search_in_file(file_name, key): #文本路径和,关键字,字典函数
- f = open(file_name) # 打开文件
- count = 0 # 记录行数
- key_dict = dict() # 字典,用户存放key所在具体行数对应具体位置
- for each_line in f: #历遍搜寻到的文本
- count += 1 #行数加一次
- if key in each_line: #如果关键字在文本里面
- pos = pos_in_line(each_line, key) #调用函数处理关键字在一行出现次数返回一个pos列表 # key在每行对应的位置
- key_dict[count] = pos #count位关键字行数,是key,pos是关键字在一行出现次数在是value。
- f.close()
- return key_dict
- def search_files(key, detail): #第一个函数,处理函数
- all_files = os.walk(os.getcwd()) #历遍当前目录返回三个元组
- txt_files = [] #新建一个列表存放文本完整路径
- for i in all_files: # 历遍三个元组
- for each_file in i[2]: #历遍第三个元组,file
- if os.path.splitext(each_file)[1] == '.txt': # 根据后缀判断是否文本文件
- each_file = os.path.join(i[0], each_file) #把完整路径赋予each_file i[0]是历遍的路径
- txt_files.append(each_file) #把路径添加到列表
- for each_txt_file in txt_files: #历遍列表 each_txt_file等于完整的txt文本路径
- key_dict = search_in_file(each_txt_file, key) #调用函数,赋值
- if key_dict:
- print('================================================================')
- print('在文件【%s】中找到关键字【%s】' % (each_txt_file, key))
- if detail in ['YES', 'Yes', 'yes']:
- print_pos(key_dict) #调用函数
- key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
- detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):' % key)
- search_files(key, detail)
复制代码
|
|