鱼C论坛

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

零基础python 030 4 求大神帮我看看代码

[复制链接]
发表于 2017-1-3 21:04:50 | 显示全部楼层 |阅读模式
10鱼币
题目:http://bbs.fishc.com/forum.php?m ... peid%26typeid%3D398
FUTR7)A~LU@MW```EN1F1O5.png

我开始写的代码是:
  1. import os
  2. def search_keyword(keyword,answer):
  3.     count = 0
  4.     list1 = []
  5.     n = 0
  6.     for each_file in os.listdir(os.curdir):
  7.         if os.path.splitext(each_file)[-1] == '.txt':
  8.             f = open(os.getcwd() + os.sep + each_file)
  9.             for each_line in f:
  10.                 count += 1
  11.                 if each_line.count(keyword) != 0:
  12.                     print('============================================================')
  13.                     print('在文件【%s】中找到关键字【%s】'% (os.getcwd() + os.sep + each_file,keyword))
  14.                     if answer == 'yes':
  15.                         while 1:
  16.                             n = each_line.find(keyword,n)
  17.                             list1.append(n + 1)
  18.                             n += 1
  19.                             if each_line.find(keyword,n) == -1:
  20.                                  break
  21.                         print('关键字出现在第%s行,第%s个位置。' % (str(count),list1))
  22.                     list1 = []
  23.                     n = 0
  24.             count = 0
  25.             f.close()  
  26.         if os.path.isdir(each_file):
  27.             os.chdir(each_file)
  28.             search_keyword(keyword,answer)
  29.             os.chdir(os.pardir)

  30. keyword = input('请将该脚本放入待查找的文件夹内,请输入关键字:')
  31. answer = input('请问是否需要打印关键字【%s】在文件中的具体位置(yes/no):' % keyword)
  32. search_keyword(keyword,answer)
复制代码


文件是: @XT8{VKPTLL(M3G[5`0KL_V.png

输入 丁 和 yes
得到的结果为: CC4_8`8GK]5GCMR@$Y7F5_N.png

后来我改代码为:
  1. import os
  2. def search_keyword(keyword,answer):
  3.     count = 0
  4.     list1 = []
  5.     n = 0
  6.     for each_file in os.listdir(os.curdir):
  7.         if os.path.splitext(each_file)[-1] == '.txt':
  8.             f = open(os.getcwd() + os.sep + each_file)
  9.             print_keyword(f,keyword,each_file)
  10.             if answer == 'yes':
  11.                 for each_line in f:
  12.                     count += 1
  13.                     while 1:
  14.                         n = each_line.find(keyword,n)
  15.                         list1.append(n + 1)
  16.                         n += 1
  17.                         if each_line.find(keyword,n) == -1:
  18.                             break
  19.                     print('关键字出现在第%s行,第%s个位置。' % (str(count),list1))
  20.                     list1 = []
  21.                     n = 0
  22.             count = 0
  23.             f.close()  
  24.         if os.path.isdir(each_file):
  25.             os.chdir(each_file)
  26.             search_keyword(keyword,answer)
  27.             os.chdir(os.pardir)

  28. def print_keyword(f,keyword,each_file):
  29.     for h in f:
  30.         if h.count(keyword) != 0:
  31.             print('============================================================')
  32.             print('在文件【%s】中找到关键字【%s】'% (os.getcwd() + os.sep + each_file,keyword))
  33.             return
  34.         

  35. keyword = input('请将该脚本放入待查找的文件夹内,请输入关键字:')
  36. answer = input('请问是否需要打印关键字【%s】在文件中的具体位置(yes/no):' % keyword)
  37. search_keyword(keyword,answer)
复制代码


结果为: ~XJ{M~{A)%IMIJD(B`H6Y7C.png

求大神们帮我看看,十分感谢

最佳答案

查看完整内容

1、print_keyword(f,keyword,each_file) 调用打印函数的时候,指针已经跳到有关键字的行。所以while循环查找关键字是从有关键字的下一行开始查找。 -----行数错误的原因 2、while 循环:先查找再判断是不对的。如果查找的行没有该关键字,会返回-1 ,然后再判断有没关键字。应该把if语句放到while循环的最前面----------取index错误的原因 n = each_line.find(keyword,n) print (n) list1.append(n + 1) 3、print('关键字 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-3 21:04:51 | 显示全部楼层
1、print_keyword(f,keyword,each_file) 调用打印函数的时候,指针已经跳到有关键字的行。所以while循环查找关键字是从有关键字的下一行开始查找。 -----行数错误的原因

2、while 循环:先查找再判断是不对的。如果查找的行没有该关键字,会返回-1 ,然后再判断有没关键字。应该把if语句放到while循环的最前面----------取index错误的原因
n = each_line.find(keyword,n)
print (n)
list1.append(n + 1)
3、print('关键字出现在第%s行,第%s个位置。' % (str(count),list1)) 每个while循环结束后(break也一样)都会打印一次。---没找到关键字的也会打印行数和空的数组。
                        
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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