程序不运行,不知道问题出在哪里?
感觉这个作业超难!我写出来的程序无法运行,找不出毛病在哪里,只好过来请教群里的高手:题目:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)
程序如下:
def search_keywords(file_path,key_words):
"""search for key words in certain file, pointing\
out the number of line and position"""
import os
all_file = os.listdir(file_path)
pickup_file = []
for each in all_file:
if os.path.isfile(each):
if os.path.splitext(each) == '.txt':
f = open(each)
row_count = 0
if key_words in f:
pickup_file.append(os.path.join(os.getcwd(),each))
print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))
for each_line in f:
row_count += 1
position = dict()
if key_words in each_line:
key_pos = each_line.find(key_words)+1
while key_pos != -1:
position = key_pos
key_pos = each_line.find(key_words,key_pos - 1)+1
print('关键字出现在第%s行,第%s个位置'%(row_count,position))
f.close()
else:
search_keywords(each, key_words)
os.chdir(os.pardir)
file_path = input('请输入要查找的文件路径:')
key_words = input('请输入要查找的关键字:')
search_keywords(file_path,key_words)
可是每次运行程序都没结果:
请输入要查找的文件路径:D:\\Practice\\临时文件
请输入要查找的关键字:小甲鱼
>>>
有没有高手啊?这个感觉不是一般水平能搞定的
我也是初学者,暂时还看不出代码问题出在哪里,但是运行时显示:FileNotFoundError: 系统找不到指定的路径。_ '$RECYCLE.BIN' print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的 本帖最后由 阿奇_o 于 2021-7-27 15:32 编辑
这道题似乎难道不少人,我在这里看到好几次了。。虽然代码没几行。。{:10_250:}
初学对于 "路径"、"文件"、"目录","当前工作目录","权限" 等等概念,或许真的一下理解不了。
没关系,这些相关问题,最终你遇到足够多次后,你总会明白的,哈哈哈
具体代码我就不写了,论坛里我想可以搜得到。。
ps: 那个什么"找不到指定的路径。_ '$RECYCLE.BIN'",这种是Windows的特殊的垃圾回收文件(目录),
这类文件通常是隐藏的,也可能需要相应的权限,所以没必要的话,可以跳过这类文件,不对它进行搜索。
不会起名字的我 发表于 2021-7-27 15:06
print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的
我重新输入一遍,应该不会错了。但是程序运行还是错误,指向第8行,就是:all_file = os.listdir(file_path) 说找不到路径。我摸不着头脑了,因为这条代码应该没错了....... 不会起名字的我 发表于 2021-7-27 15:06
print('在文件%s中找到关键字【%s】'% (join(os.getcwe(),each),key_words))这行代码的括号不是英文的
请输入要查找的文件路径:D:\\Practice\\临时文件
请输入要查找的关键字:小甲鱼
Traceback (most recent call last):
File "D:\Practice\search_keywords.py", line 65, in <module>
search_keywords(file_path,key_words)
File "D:\Practice\search_keywords.py", line 59, in search_keywords
search_keywords(each, key_words)
File "D:\Practice\search_keywords.py", line 8, in search_keywords
all_file = os.listdir(file_path)
FileNotFoundError: 系统找不到指定的路径。: 'data'
然后,我试着用手工输入一下,可以找到路径的呀:
>>> import os
>>> os.listdir('D:\\Practice\\临时文件')
['data', 'exercise', 'file print.py', 'file_example.txt', 'file_reader.py', 'record.txt', 'with file.py', '升怪打级.txt', '吉晶.pptx', '安装PyTorch错误.jpg', '练习本', '量子通信核心概念股.png'] 本帖最后由 叼辣条闯世界 于 2021-7-31 12:30 编辑
global file_hz,position
def search_keywords(file_path,key_words):
row_count = 0
"""search for key words in certain file, pointing\
out the number of line and position"""
import os
os.chdir(file_path)
all_file=os.listdir()
pickup_file = []
for each in all_file:
if os.path.isfile(each):
file_hz = os.path.splitext(each)
if file_hz == '.txt':
try:
f = open(each,encoding='gb18030')
file_read = f.read()
except:
f = open(each,encoding='utf8')
file_read = f.read()
row_count = 0
if key_words in file_read:
position = dict()
pickup_file.append(os.path.join(os.getcwd(),each))
print('在文件' + each + '中找到关键字:%s'%key_words)
f.seek(0,0)
file_get_lines = int(len(f.readlines()))
f.seek(0,0)
for i in range(file_get_lines):
file_readlines = f.readline()
if key_words in file_readlines:
row_count += 1
key_pos = file_readlines.find(key_words)+1
#while key_pos != -1:
key_pos = file_readlines.find(key_words)+1
print('关键字出现在第%s行,第%s个位置'%(row_count,key_pos))
#break
else:
row_count += 1
else:
search_keywords(each, key_words)
os.chdir(os.pardir)
file_path = input('请输入要查找的文件路径:')
key_words = input('请输入要查找的关键字:')
search_keywords(file_path,key_words)
input('任意键退出')
本帖最后由 z5560636 于 2021-7-29 11:10 编辑
两个错误:
1.需要切换到当前目录
os.chdir(file_path)
all_file = os.listdir()
2.join的使用错误,及getcwd()的拼写错误。
print('在文件%s中找到关键字【%s】' % (os.getcwd().join(each), key_words)) 叼辣条闯世界 发表于 2021-7-29 07:50
佩服佩服!虽然有的看不懂 import os
def search_file(path: str, key: str) -> bool:
"""
The main part of the program
search the contents of the file and print it.
"""
global j, list_
try:
j = open(path, 'r', encoding="utf8")
list_ = j.readlines()
except UnicodeError:
j = open(path, 'r', encoding="gbk")
list_ = j.readlines()
except PermissionError:
print("打开文件{0}时出现错误:PermissionError(权限不足)".format(path))
return False
except:
print("打开文件{0}时出线未知错误(Unknown Error)".format(path))
j.close()
line_num = 1
for line in list_:
if key not in line:
continue
else:
for m in range(len(path)):
if path[-m] == "\\":
print("在文件{0}中找到关键字".format(path[-m + 1:]))
break
num = 1
for n in line:
keywords = ""
for i in range(len(key)):
keywords += n
if keywords == key:
print("关键字在第{0}行,第{1}个位置".format(line_num, num))
num += 1
line_num += 1
return False
def check_file(filename: str) -> bool:
"""Check whether the file is text."""
if filename[-3:] == "txt":
return True
return False
def walk_dir(root: str) -> list:
"""Get all files (including sub-files) under the folder
and return a list."""
all_file_list = []
for dir_path, dir_names, file_names in os.walk(root):
for filename in file_names:
all_file_list.append(os.path.join(dir_path, filename))
return all_file_list
default_path = input("输入路径:")
default_keywords = input("输入关键字:")
for i in walk_dir(default_path):
if check_file(i):
search_file(i, default_keywords)
页:
[1]