python文件路径和内容处理以及异常处理

1.文件路径

绝对路径和相对路径

绝对路径:绝对路径,从盘符开始的路径(d:\data\file\abc.txt)

from pathlib import Path
path=Path('test.txt')
print(path.absolute())

相对路径:相对于当前的路径,当前是一个变量,在执行python时,所处的目录(./abc/a.txt  ../ab/c.txt test.txt)

没有写文件夹的:当前文件夹下的文件
./当前文件夹下的文件
../父文件夹下的文件

如何判断路径存在?

import os
from pathlib import Path
path=Path('test.txt')
print(path.absolute())
if(path.exists()):
    print("路径存在")
    if path.is_dir(): #是不是目录
        path.rmdir() #删除目录
        print("目录删除成功")
    else:
        os.remove(path)
        print("文件删除成功")
else:
    print("路径不存在")
    #path.mkdir()#创建目录
    path.touch()#创建文件


path=Path('./yaml_demo.py')
print(path.absolute())

path=Path('../yaml_demo.py')
print(path.absolute())

path功能

path不仅可以实现相对路径转绝对,而且可以:

重命名文件:os.rename("abc.txt","a.txt")

获取当前文件的路径信息:

os.getcwd()#获取当前文件到绝对路径

os.path.dirname(__file__)#获取当前文件到绝对路径

根据路径创建文件
根据路径创建目录
判断路径是否存在
判断路径是目录还是文件

获取文件夹的所有文件名:os.listdir("999") #返回结果是一个文件名的列表

删除路径(目录):os.rmdir("999") #删除空文件夹

listdir1=os.listdir("888")
#由于对文件的操作有一定的局限性
#只能操作当前项目中的文件,除非使用绝对路径
path1=r"D:\python\code\pythonProject2\888\\"   #os.getcwd()
for i in listdir:
    #拼接文件的路径信息+文件的名字
     print(path1+i)
     os.remove(path1+i)
else:
     os.rmdir("888")

删除文件(os模块):os.remove("a.txt")

2.文件内容

2.1 打开文件

首先要有路径,才能操作文件
其次要打开文件,才能操作文件

内置函数open打开文件 

open(file,mode='r',buffering=None, encoding=None, errors=None, newline=None, closefd=True)

  •  位置参数:file文件路径
  • 关键字参数:model

    wt:文本写入(会创建新文件,清空文件内容)
    rt:文本读取 (默认值)
    wb:二进制写入(会创建新文件,清空文件内容)
    b:二进制读取

  • encoding:
    gbk:windows中文版的默认编码
    utf-8:推荐的统一编码

文件操作

open("test.txt",mode="wt",encoding="utf-8")#创建空文件
open("test.txt",mode="rt",encoding="utf-8")#读取文本文件

open("img.jpg","wb")#创建空二进制文件
open("img.jpg","rb")#读取二进制文件

open("test.txt") #没有关键字参数,不报错
open("test.txt",mode="w") #wt
open("test.txt",mode="t")#rt

2.2 读写文件

注意:

  1. 正确的打开模式,才能读写
  2. 读写之后,应该及时关闭文件

2.2.1 写入文件

write:写入内容

writelines:写入多行

a="你好,我是张三"
b="你好,我是王舞"
c=[a,b]
f=open("test.txt",mode="wt",encoding="utf-8")
f.write("你好呀\n今天天气很好呀") #写入内容
f.writelines(c) #写入多行
f.close()

2.2.2 读取文件

read:读取内容

f=open("test.txt",encoding="utf-8")
s=f.read() #读取全部内容
print(s)
f.close()

readline:读取一行

f=open("test.txt",encoding="utf-8")
s=f.readline() #读取一行
print(s)
f.close()

readlines:读取所有行

f=open("test.txt",encoding="utf-8")
s=f.readlines() #读取所有行
print(s)
f.close()

“行”的标准是什么?

  • 以换行符进行分割

2.3 with--open

可以通过上下文管理器关键字with,进行读写,不需要进行手动关闭文件,使用完会自动关闭

如果打开一个文件是写入的模式,该文件存在那么会覆盖内容,如果不存在会进行新建一个文件

如果以读的模式打开一个文件,文件不存在会直接报错

with open("./abc.txt","w",encoding="utf-8") as f:
       f.write("今天天气挺好的")

 2.4 r+,w+,a+

 后面加上+ 表示可以同时读写,如:

with open("./abc.txt","w+",encoding="utf-8") as f:
    f.write("今天天气很好呀")
    print(f.read())

 

3.异常处理

3.1 异常常识:

异常+不处理:程序崩溃

异常+处理:程序继续运行

异常的特点:

  • 停止执行
  • 向上冒泡(传播)
  • 显示异常原因和调用栈

3.2 异常处理

在异常传播的任何一个层级,通过捕捉对异常进行处理

def c():
try:
open("abc.apx") #出现异常
except Exception as e: #捕捉常见异常
print(1,e)
except FileNotFoundError as e:
print(2,e)
print("i am c")

c()

注意:

  • 异常捕捉从上到下,只捕捉一次
  • 异常也分大小
  1.     如果捕捉的异常==出现的异常,捕捉成功
  2.     如果捕捉的异常>出现的异常,捕捉成功

 3.3 try--except--else--finally

try:
     print (1)
     print (2)
     print (3)
     print(a)
     print(5)
     print(6)
     print(7)
except:
     print("当try中捕获到异常之后会执行except里面的代码")
     print("如果try的代码快没有出现异常,那么不会执行except里面的代码")
else:
     print("如果try中没有出现异常会执行的代码块")
     print("如果try中没有出现异常会执行的代码块")
finally:
     print("不管try中是否有异常,都会执行的代码块")

 

posted @ 2023-06-05 18:31  万溪汇海  阅读(46)  评论(0编辑  收藏  举报