Ari小虎鱼 发表于 2022-5-17 16:39:41

打开文件路径

寻找当前目录下文本文件中关键字的位置
from pathlib import Path

kw = input("请将该脚本放于待查找的文件夹内,请输入关键字:")
m = list(Path.cwd().glob("**/*.txt"))   #m -> 所有文件
print(m)

g = []#->文件对应位置
n = {}
for each in m:
    each.open('r')
    x = each.read()
    if kw not in x:
      each.close()
      continue
    else:
      g.append(each)
      for i in range(x.count('\n')):#每一行寻找
            j = each.readline()
            if kw in j:
                n = j.find(kw)#->行数对应所在位置
            else:
                continue
      g.append(n)
      each.close()

ans = input(f"请问是否需要打印关键字【{kw}】在文件中的具体位置(YES/NO):")
for each in range(0,len(g),2):
    print(f"在文件【{g}】中找到关键字【{kw}】")
    if ans == 'YES':
      print(f"关键字出现在第{list(g.keys())}行,第{g}个位置")
报错说each是路径而不是文件,请问这个怎么改
Traceback (most recent call last):
File "C:\Users\Zhou Yiyun\Desktop\测试\^第030讲-搜索关键字.py", line 11, in <module>
    x = each.read()
AttributeError: 'WindowsPath' object has no attribute 'read'
求助求助

Twilight6 发表于 2022-5-17 16:42:54


第 10 行代码 , each.open('r') 改成 each = each.open('r'),另外不建议用 int 类型作为字典的键

你代码的 30 行,g 是列表 没有 keys() 方法,你应该是想对 n 进行调用 keys() 方法吧?

Ari小虎鱼 发表于 2022-5-17 17:10:42

Twilight6 发表于 2022-5-17 16:42
第 10 行代码 , each.open('r') 改成 each = each.open('r'),另外不建议用 int 类型作为字典的键

你 ...

谢谢提醒^o^
    x = each.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 2: illegal multibyte sequence
请问这个报错是什么意思{:10_282:}

Twilight6 发表于 2022-5-17 17:11:49

Ari小虎鱼 发表于 2022-5-17 17:10
谢谢提醒^o^

请问这个报错是什么意思


编码错误,文件编码和读取的编码不一致,你试试在 open 函数里面添加 encoding = "utf-8"
页: [1]
查看完整版本: 打开文件路径