|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def search(dir1,name):
import os
os.chdir(dir1)
for each_file in os.listdir(os.curdir):
if os.path.isfile(each_file):
type1=os.path.splitext(each_file)[1]
if type1=='.txt':
f=open(each_file,'r',encoding='utf-8')
n=0
if name in f:
print('文件【'+os.getcwd()+os.sep+each_file+'】中找到关键字【%s】'%(name))
for i in f:
n+=1
if name in i:
count=[]
str1=i
while name in str1:
a=str1.find(name)
str1=str1[(a+len(name)):]
count.append(a)
print('关键字出现在第%d行,第',count,'个位置'%(n))
f.close()
if os.path.isdir(each_file):
search(each_file,name)
os.chdir(os.pardir)
dir1=input('请输入待查找的初始目录:')
name=input('请输入关键字:')
search(dir1,name)
这是我自己打的 自己是个小白看不出来哪错了 求助大佬
第一个错误是直接拿 字符串 与 文件对象进行比较:
可以将文件对象先进行读取,读取后在用 seek 函数将文件指针移动回 0
第二个错误是格式化字符串错误了:
print('关键字出现在第%d行,第',count,'个位置'%(n))
这里应该改成:
print('关键字出现在第%d行,第' % n, count, '个位置')
还有个错误,虽然不影响代码执行,但是会导致你的结果不正确:
while name in str1:
a = str1.find(name)
str1 = str1[(a + len(name)):]
count.append(a)
若在同一行有多个相同的字符,那么会导致第二次开始的索引值是在新字符串 str1[(a + len(name)):] 进行判断距离的
所以这里 a 要加上上次的索引值 + 1,即将代码改成:
length = 0
while name in str1:
a = str1.find(name)
str1 = str1[(a + len(name)):]
count.append(length + a)
length += a + 1
另外导入模块尽量别写在函数内,写在文件前几行位置
参考代码:import os
def search(dir1, name):
os.chdir(dir1)
for each_file in os.listdir(os.curdir):
if os.path.isfile(each_file):
type1 = os.path.splitext(each_file)[1]
if type1 == '.txt':
f = open(each_file, 'r', encoding='utf-8')
n = 0
text = f.read()
if name in text:
print('文件【' + os.getcwd() + os.sep + each_file + '】中找到关键字【%s】' % (name))
f.seek(0)
for i in f:
n += 1
if name in i:
count = []
str1 = i
length = 0
while name in str1:
a = str1.find(name)
str1 = str1[(a + len(name)):]
count.append(length + a)
length += a + 1
print('关键字出现在第%d行,第' % n, count, '个位置')
f.close()
if os.path.isdir(each_file):
search(each_file, name)
os.chdir(os.pardir)
dir1 = input('请输入待查找的初始目录:')
name = input('请输入关键字:')
search(dir1, name)
|
|