问题引入,绝对路径的缺点
在python学习中,我会将代码放在code目录下,其他类型文件放在res目录下,方便浏览和管理。
但是我想在code目录下404.py调用res目录下access.log,使用绝对路径很长(C:\Users\Administrator\Desktop\Day\Jasn–70–Days\Day01~15\Day 09\code\access.log),而且文件夹位置一旦移动就路径就会出错。
相对路径出场
r'../res/access.log'
即能完美解决这个问题。
所以修改后的代码为:
'''
模拟管道,实现功能:tail -f access.log | grep '404'
version:01
author:jasn
Date:2020-01-09
'''
import time
def tail(filepath):
with open(filepath,'rb') as f:
f.seek(0,2) #获取最后一行
while True:
line=f.readline()
if line:
yield line
else:
time.sleep(0.5) #定时间隔刷新
def grep(pattern,lines):
for line in lines:
line=line.decode('utf-8')
if pattern in line:
yield line
for line in grep('404',tail(r'../res/access.log')):
print(line,end='')
#写入内容
with open(r'../res/access.log','a',encoding='utf-8')as f:
f.write('出错了,404!\n')
python相对路径的用法
| -- code
| -- conf.py
| -- start.png
| -- res
|config.txt
|access.log
| -- main.py
| --logo.png
如果main.py,引用logo.png,相对路径的写法为:"./logo.png"。logo.png和main.py处于同一目录下
如果conf.py,引用access.log,相对路径的写法为:"…/res/access.log"
如果conf.py,引用logo.png,相对路径的写法为:"…/logo.ong"
. 指当前文件所在的文件夹
… 指当前文件的上一级目录。
当然相对路径还可以表示上上级、上上上级、上上上上级目录等
上上级:…/…/
上上上级:…/…/…/
上上上上级:…/…/…/…/
相对路径也可以表示上级目录下的不同子目录和文件,例如:
…/…/Day09/code/test.txt:表示当前文件的上上级目录下的Day09目录下的code目录里面的test.txt文件