鱼C论坛

 找回密码
 立即注册
查看: 1096|回复: 1

《入门学习Python》第30讲第4题

[复制链接]
发表于 2017-11-13 15:07:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shizhou 于 2017-11-14 08:14 编辑

看了小甲鱼老师的答案,感觉逻辑复杂,看懂有难度。参考后,写了这个程序,也能实现!还望大神指教,是否符合题目要求,哪里还可以优化改进!
  1. import os

  2. def file_key(key_word) :
  3.      for each_file in os.listdir(os.curdir) :
  4.         if os.path.splitext(each_file)[1] == '.txt':  
  5.             if key_word in open(each_file).read():
  6.                 ext = os.getcwd() + os.sep + each_file
  7.                 print('在文件【%s】中找到关键字【%s】'%(ext,key_word))

  8.             f = open(each_file)
  9.             row = 0
  10.             for eachline in f:
  11.                 row += 1
  12.                 if key_word in eachline:
  13.                     print('关键字出现在第 %d 行,'% row,end='')

  14.                     pos = []
  15.                     begin = eachline.find(key_word)
  16.                     while begin != -1:
  17.                         pos.append(begin+1) # 用户的角度是从1开始数
  18.                         begin = eachline.find(key_word,begin+1) # 从下一个位置继续查找
  19.                     print('第 %s 个位置。'% pos)
  20.             print()
  21.             print(spacing)
  22.   
  23.         if os.path.isdir(each_file) :
  24.             os.chdir(each_file)
  25.             file_key(key_word)
  26.             os.chdir(os.pardir) # 递归调用后切记返回上一层目录

  27. key_word = input('请将该代码放于待查找的文件夹内,请输入关键字:')

  28. decide = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):'% key_word)
  29. spacing = '====================================================================\n'
  30. print(spacing)

  31. if decide in ['YES','Yes','yes']:
  32.      file_key(key_word)

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-13 17:25:46 | 显示全部楼层
自己都改进了,小甲鱼老师的答案还会感觉逻辑复杂吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 14:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表