写了一个小时 改的跟小甲鱼老师的代码差不多 但是就是运行会出错
import osx = input("请将该脚本放于查找的文件夹内,请输入关键字:")
y = input("请问是否需要打印关键字(%s)在文件夹中具体位置(yes/no):" % x)
#def main1(line , x):
#list1 = []
#for t in line.find:
#list1.append(t + 1)
#return list1
def main1(line , x):
list1 = []
begin = line.find(x)
while begin != -1:
list1.append(begin + 1)
begin = line.find(x , begin+1)
return list1
def main2(file , x):
f = open(file ) #f = open(r"file")
p = dict() #g = dict()
count = 0
for h in f:
count +=1
if x in h:
pos = main1(h , x)
p = pos #g = pos
f.close()
return p #return g
def main3(p):
x = p.keys()
x = sorted(x)
for temp in x:
print("关键字出现在%s,第%s个位置;" % (temp , str(p)))
def main(x , y):
all_file = os.walk(os.getcwd())
m = all_file
a = []
for i in m:
for ea in i:
if os.path.splitext(ea) == '.txt': #if os.path.splitext(ea) == '.text'
k = os.path.join(i,ea)
a.append(k)
for z in a:
p = main2(z , x) #p = main3(z , x)
if p: #if p:
print("================")
print("在文件(%s)中找到关键字(%s)" % (z , x))
if y in ('yes','Yes','YES'):
print(p) # print(p)
main(x , y)
请求各位大佬斧正, {:10_266:} 出现什么错误啊 bonst 发表于 2021-1-3 18:25
出现什么错误啊
这个
Traceback (most recent call last):
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 65, in <module>
main(x , y)
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 56, in main
p = main2(z , x) #p = main3(z , x)
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 25, in main2
for h in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 45: illegal multibyte sequence pretty22 发表于 2021-1-3 18:34
这个
所有的文件打开形式换个编码
f = open(file,encoding='utf-8') txt文件打开的编码错误
这一句
f = open(file)
改成
f = open(file,encoding='utf-8')
完整代码
import os
x = input("请将该脚本放于查找的文件夹内,请输入关键字:")
y = input("请问是否需要打印关键字(%s)在文件夹中具体位置(yes/no):" % x)
#def main1(line , x):
#list1 = []
#for t in line.find:
#list1.append(t + 1)
#return list1
def main1(line , x):
list1 = []
begin = line.find(x)
while begin != -1:
list1.append(begin + 1)
begin = line.find(x , begin+1)
return list1
def main2(file , x):
f = open(file,encoding='utf-8')
p = dict() #g = dict()
count = 0
for h in f:
count +=1
if x in h:
pos = main1(h , x)
p = pos #g = pos
f.close()
return p #return g
def main3(p):
x = p.keys()
x = sorted(x)
for temp in x:
print("关键字出现在%s,第%s个位置;" % (temp , str(p)))
def main(x , y):
all_file = os.walk(os.getcwd())
m = all_file
a = []
for i in m:
for ea in i:
if os.path.splitext(ea) == '.txt': #if os.path.splitext(ea) == '.text'
k = os.path.join(i,ea)
a.append(k)
for z in a:
p = main2(z , x) #p = main3(z , x)
if p: #if p:
print("================")
print("在文件(%s)中找到关键字(%s)" % (z , x))
if y in ('yes','Yes','YES'):
print(p) # print(p)
main(x , y)
wuqramy 发表于 2021-1-3 18:50
txt文件打开的编码错误
这一句
加上去之后就成为这样了
Traceback (most recent call last):
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 64, in <module>
main(x , y)
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 55, in main
p = main2(z , x) #p = main3(z , x)
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 25, in main2
for h in f:
File "C:\Program Files\Python39\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 0: invalid start byte 昨非 发表于 2021-1-3 18:42
所有的文件打开形式换个编码
加上就成为这样了
Traceback (most recent call last):
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 64, in <module>
main(x , y)
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 55, in main
p = main2(z , x) #p = main3(z , x)
File "C:/Users/pp980/Desktop/从文件中找关键字.py", line 25, in main2
for h in f:
File "C:\Program Files\Python39\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 0: invalid start byte 本帖最后由 jackz007 于 2021-1-3 19:30 编辑
import os
def main(x , y):
for root , dirs , files in os . walk(os . getcwd()):
for file in files:
ext = os . path . splitext(file) . lower() # 提取文件扩展名并一律转为小写字母
if ext in ('.py' , '.c' , '.cpp' , '.h' , '.txt'): # 根据扩展名筛选符合条件的目标文件
fn = os . path . join(root , file) # 合成目标文件的全路径
f = open(fn)
c , r , d = 0 , 0 , [] # c ,r 为行号、列号计数
try: # 防止程序因读取文件出现错误而终止运行
for txt in f: # 风险语句,如果文件编码存在问题,执行此句会出错
r = txt . find(x , 0) # 查找关键字,执行到此句,说明当前文件平安度过风险
while r != - 1: # 循环查找可能出现在同一行的多个关键字
d . append((c + 1 , r + 1))
r = txt . find(x , r + 1)
c += 1 # 当前行数加 1
except Exception as e: # 如果读取文件出现错误会到这里继续
print('*** 错误 :文件 ["%s"] ' % fn) # 报告出现错误的文件名称及其路径
print('\t' , e) # 报告系统给出的错误类型及原因细节
f . close() # 无论是否出现错误,都会从这里汇合继续执行
if d:
print('文件 ["%s"] 中找到关键字 ["%s"]' % (fn , x))
if y == 'yes':
for x in d:
print('\t第 %3d 行,%3d 列' % (x , x))
x = input("请将该脚本放于查找的文件夹内,请输入关键字:")
y = input("请问是否需要打印关键字(%s)在文件夹中具体位置(yes/no):" % x)
main(x , y)
两个编码都报错了,可能原因是因为你所查找的文件夹内有多种编码的 txt 文本文件
解决方法可以去重新新建个文件夹,然后将代码移动到这个文件夹内
将需要测试的 txt 文本全部另存为,保存时候左下角有保存的编码,选择 ANSI 编码,即可
Twilight6 发表于 2021-1-3 21:01
两个编码都报错了,可能原因是因为你所查找的文件夹内有多种编码的 txt 文本文件
解决方法可以去重新 ...
对 我之前把这个txt文件跟写好的py文件放到了桌面 才出现了这种情况
然后我将这几个文件放到了新建文件夹中
在新建的文件夹中运行这个py文件 就没有这些 错误了
谢谢大佬的解答
{:10_254:} jackz007 发表于 2021-1-3 19:07
哇 这个我还没学到这些内容{:10_266:}看不懂
但还是谢谢大佬了 等我保存学到这些知识点后再来拜读{:10_256:}
页:
[1]