python文件常用操作
2021/6/17 22:56:16
本文主要是介绍python文件常用操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
相对路径和绝对路径
绝对路径:从根目录开始/
相对路径:当前目录为:“C:\Windows\System32”,目录下有个文件test.txt,他的相对路径就是.\test.txt(.\表示当前所在目录)
文件操作
- 删除、修改权限:作用于文件本身,属于系统级操作
- 写入、读取:对于文件内容的操作,属于应用级操作
- 文件操作步骤:
1、打开文件open()
2、读取文件read()、readline()、readlines()/写入文件write()
3、关闭文件close(),不管读写,最后一定要关闭文件
open()函数
- 格式:f=open(‘filename.txt’,mode=‘r’,encoding=None)
打开的文件名字,以及打开方式,及设置的编码格式,不指定打开方式,默认是read模式- mode=r
以只读的方式打开文件 - mode=rb
以二进制格式、采用只读的方式打开文件,一般用于图片、音频文件 - mode=r+
属于加模式,可读可写,其中写就是追加模式 - mode=w
以只写方式打开文件,如果文件存在,会清空文件原有内容 - mode=wb
以二进制格式、只写方式打开文件,用于非文本文件,如音频文件 - mode=w+
以读写模式打开文件,打开文件时会清空文件内容,读就属于追加模式 - mode=a
属于加模式,以只写方式打开文件,文件如果不存在,则创建新文件,若文件存在则追加到文件末尾
- mode=r
- mode=ab
以二进制格式打开文件,并采用追加模式,对文件只有写权限,文件如果不存在,则创建新文件,若文件存在则追加到文件末尾 - mode=a+
以读写模式打开文件,文件如果不存在,则创建新文件,若文件存在则追加到文件末尾
read()函数
- read()
格式:file.read([size])
不加参数则读取全部内容,加size参数则按字节读取
#可只写文件名,其他默认,文件名如不在同一路径下,需写绝对路径 f1 = open('test.txt', 'r', encoding='utf-8') print(f1.read()) print(f1.read(3)) print(f1.read(3)) #最重要一定要关闭文件,不然会占用资源 f1.close()
read()函数读取过程中提示UnicodeDecodeError异常或者显示为乱码,编码格式和open()函数打开文件的编码格式不一致
- readline()
格式:file.readline([size])
按行读取文件内容,包括换行符‘\n’,size参数是指定一行中读取的字节数
f1 = open('test.txt', 'r', encoding='utf-8') print(f1.readline()) print(f1.readline(2)) f1.close()
- readlines()
格式:file.readlines()
读取文件中的所有行,readlines直接读取出来的是一个list常和for循环一起使用
f1 = open('test.txt', 'r', encoding='utf-8') rl1 = f1.readlines() for i in rl1: print(i) #rl2 = f1.readlines() #print(rl2) f1.close()
大文件读取
open()函数和read()函数读取文件,会一次性读取全部内容,只适合读取小文件,如果文件过大,会造成内存溢出
windows下创建大文件的方法:
fsutil file createNew C:\user\xx\test.txt 1024
write()函数
- write()函数
语法:file.write(string)
写入字符串
f_w = open('writetest.txt','w') print(f_w.write('I miss you,\nbut i miss you')) f_w.close()
- writelines()函数
语法:file.writelines()
可以写入字符串列表
#writelines可以将一个文件中的内容复制到其他文件 fr = open('test.txt','r',encoding='utf-8') fr1 = fr.read() fw = open('rwtest.txt','w',encoding='utf-8') fw.writelines(fr1) fr.close() fw.close()
- seek()函数
file.seek(offset,[,whence])
offset–偏移量(支持正数(向后偏移)、负数(向前偏移))
whence–文件指针位置(0-文件开始,1-当前位置,2-文件尾)
移动文件指针到指定位置 - tell()函数
判断文件当前指针位置
#tell() f1 = open('test.txt', 'r', encoding='utf-8') print(f1.read(3)) print(f1.tell()) f1.close() #seek()使用seek函数,如果不是以二进制模式打开的话,是只允许从开头位置读取文件 f1 = open('test.txt', 'rb') print(f1.read(3)) print(f1.tell()) f1.seek(5,2) print(f1.tell()) print(f1.read(6))
- with as 读写文件
with as语句会自动分配资源和释放资源
语法:with 表达式[as target]:
代码块
with open('test.txt','w',encoding='utf-8') as f: f.write('write something') f.writelines('write a dog\nwrite a cat\nwrite a bird') with open('test.txt','r') as r: r1 = r.readlines() for i in r1: print(i)
- fileinput模块 逐行读取多个文件
import fileinput # print(dir(fileinput)) #inplace=True:如果有改动要将改动写到原文件,backup:是指定备份文件的扩展名,inplace和openhook不能一起使用,不然会报错:valueError for line in fileinput.input(files=('test.txt', 'rwtest.txt'),inplace=True,backup='.bak'): print(line.replace('w','W')) fileinput.close() # # 使用for循环遍历 fileinput 对象 for line in fileinput.input(files=('test.txt', 'rwtest.txt')): # 输出读取到的内容 print(line,end='') # 关闭文件流 fileinput.close()
- linecache()模块 读取文件指定行
import linecache # print(dir(linecache)) print(linecache.getline('test.txt',5)) #print(linecache.getlines('test.txt'))
python常见异常类型
- 语法错误–即解析代码时发生的错误(syntaxError)
- 运行错误–即语法正确,运行时发生了错误,我们把运行时发生的错误叫异常(Exceptions)
异常类型
AssertionError assert关键字后面的条件为假时,程序停止运行且抛出的
异常
AttributeError 当访问对象属性不存在时抛出的异常
IndexError 索引超出序列范围
KeyError 字典中查找一个不存在的关键字
NameError 访问一个没有被申明的变量时引发的异常
ValueError 传入一个不被期望的值,即 传入类型不正确
TypeError 不同数据类型直接的无效操作
ZeroDivisionError 除法运算中除数为0引发的异常
ImportError 无法引入包
IOError 输入输出异常,文件操作
捕获异常
语法:try:
可能产生异常的代码块
except [(error1,error2) [as e]]:
处理产生异常的代码块
except [(error1,error2) [as e]]:
处理产生异常的代码块
except Exception:
处理其他异常
异常相关的关键字:
try/except–捕获异常并处理
pass–忽略异常
as–定义异常实例(except NameError as e)
else–如果try中语句没有引发异常,那就处理else中的代码块
finally–资源回收机制,无论是否出现异常都处理的代码块
raise–引发/抛出异常
try: a = 'haha' print(a[9]) except Exception as err: print('索引超出范围:{}'.format(err))
try except捕获了异常,但是不知道哪里出现了问题,是语法问题还是数据类型的问题可以用except Exception as err把错误打印出来,方便定位问题
还可以先不加异常,先执行代码块,把可能会出现的异常加到except中
try: a = int(input('请输入一个整数: ')) b = int(input('请输入一个整数: ')) c = a/b except ValueError as e: print('输入的值有误: {}'.format(e.args)) except ZeroDivisionError as e: print('输入的值有误: {}'.format(e.args)) except Exception as err: print('未知异常') else: print('运算结果为:%s' % c) finally: print('程序结束')
抛出异常
raise一般和条件语句一起使用。
语法:raise[exceptionName (reason)]
raise的用法有三种:
- 单独一个raise,引发当前上下文中捕获的异常
- raise异常类名称,表示引发执行类型的异常
- raise异常类名称(描述信息),在引发指定异常类型的时候,附带异常信息
#repr()可以把raise后面的信息打印出来 try: pwd = str(input('请输入密码:')) if len(pwd) < 8: raise ValueError('密码不能小于8位') elif len(pwd) > 16: raise ValueError('密码不能超过16位') else: print('输入正确') except ValueError as e: print('请输入正确的密码位数',repr(e))
traceback模块
- traceback模块中的traceback.print_exc()可以将异常的传播轨迹打印到控制台或指定文件
- format_exc()返回一个字符串
import traceback try: print(1/0) except Exception as e: print(traceback.print_exc) error = traceback.format_exc() print(error)
这篇关于python文件常用操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python