前言
本次内容主要介绍文件处理open函数以及路径处理。
一、open函数
根据前面介绍的函数调用方式,调用open函数。
#open函数调用 open() TypeError: open() missing required argument 'file' (pos 1)
我们发现报错了TypeError,缺少一个位置参数file。open函数是python的一个内置函数,查看源码,我们可以看到open函数有7个参数,包括1个位置参数file和6个默认参数。
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
创建一个名称为“open函数.txt”的文件,再次调用open函数。
法外狂徒张三
王二狗
今天星期日
open('open函数.txt')
Process finished with exit code 0
调用成功,但是文件未打印内容,那么该如何获取”open函数.txt“的内容呢?
1、文件读取
根据前面所介绍的,函数有返回值,那我们试着直接通过返回值打印出来。
#open函数调用 f= open('open函数.txt') print(f) <_io.TextIOWrapper name='open函数.txt' mode='r' encoding='cp936'> Process finished with exit code 0
不难看出,打印出的内容是一个io的文件对象,后面我们可以通过”对象.方法”的形式调用函数。
read():读取文件内容。读取的结果是字符串
#open函数调用 f= open('open函数.txt') f.read()
#报错
Traceback (most recent call last):
File “E:/python_workspaces/python基础语法/文件和路径处理/open函数.py”, line 3, in <module>
f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 4: illegal multibyte sequence Process finished with exit code 1
如上所述,这里报错了,UnicodeDecodeError,文件编码错误,现在我们调整open函数传参的编码方式为utf8,并再次调用
#open函数调用 f= open('open函数.txt',encoding="utf8")
cont = f.read()
print(cont)
#运行结果
法外狂徒张三
王二狗
今天星期日
readline():读取文件内容,只读取一行内容。
#open函数调用 f= open('open函数.txt',encoding="utf8") content = f.read() print(content) #readline() cont=f.readline() print(cont) #运行结果 法外狂徒张三 王二狗 今天星期日
根据以上运行结果,我们可以看到打印的是第一次读取的内容,content。相当于readline没起作用?这是为什么呢?
当我们看书的时候,眼睛会跟着字体一起移动,当内容读完后,眼睛此时的位置会在文章的最后一个字,同理,当文件读取后,光标的位置就移动到文件的最后了,那么再次读取的时候已经没有内容了。
解决方法1:重新打开文件,然后调用函数读取文件内容
#open函数调用 f= open('open函数.txt',encoding="utf8") content = f.readline() print(content) #运行结果 法外狂徒张三
解决方法2:移动文件光标位置到文件开头,然后重新读取文件内容。
#open函数调用 f= open('open函数.txt',encoding="utf8") content = f.read() print(content) #移动光标位置 f.seek(0) #readline() cont=f.readline() print(cont) #运行结果: 法外狂徒张三 王二狗 今天星期日 法外狂徒张三
readlines():读取文件内容,读取所有的内容。以列表的形式打印出来。
f= open('open函数.txt',encoding="utf8") content = f.readlines() print(content) #运行结果 ['法外狂徒张三/n', '王二狗/n', '今天星期日']
2、文件写入
write():文件写入
#open函数调用 f= open('write.txt',encoding="utf8") #文件写入 f.write('少女的腿毛') #运行结果 io.UnsupportedOperation: not writable
从上面可以看到,文件写入报错了。找不到write.txt的这个文件。这是我们在文件写入的时候缺少一个参数mode=’w’
#open函数调用 f= open('write.txt',encoding="utf8",mode='w') #文件写入 f.write('少女的腿毛')
打开’write.txt’文件,出现了“少女的腿毛”字样。
重新写入“少女的腿毛2”,
#open函数调用 f= open('write.txt',encoding="utf8",mode='w') #文件写入 f.write('少女的腿毛2/n')
打开文件后,少女的腿毛变成了少女的腿毛2,文件前面写入的内容被完全覆盖。出现这种现象的原因是文件写入模式,那么有哪些模式呢?
文件模式
常用的模式
1、r模式:只读模式
2、w模式:写入模式,这种模式会覆盖之前写入的内容
3、a模式:追加模式,相当于w模式的进阶,区别在于不会覆盖文件已经写入的内容
4、rb模式:用于读取二进制文件的只读,例如图片和视频等
5、wb模式:以二进制文件的写入
6、ab模式:以二进制形式追加写入内容。
详情可见https://www.runoob.com/python/python-func-open.html
write()
3、文件关闭
close()
关闭已经打开的文件。文件打开后需要关闭文件,不然会造成资源被大量占用,导致内存不够。
二、with open()
为解决用户在open()函数调用后忘记关闭文件而导致资源浪费的现象,python提出了with open的用法。语法如下:
#open函数调用 with open('write.txt',encoding="utf8",mode='w') as f: #文件写入 f.write('tuimao')
其他的用法与open函数一致。不需要用户关闭文件,with open会自动释放缓存。
三、路径处理
1、系统路径,python能够自动找到的系统路径。
import sys print(sys.path)
#运行结果
[‘E://python_workspaces//python基础语法//文件和路径处理’,
‘E://python_workspaces//python基础语法’,
‘D://Python39//python39.zip’,
‘D://Python39//DLLs’,
‘D://Python39//lib’,
‘D://Python39’,
‘D://Python39//lib//site-packages’]
2、print(__file__)当前python文件的路径
print(__file__)
3、os.path.abspath:绝对路径
import os print(os.path.abspath('write.txt'))
#运行结果
E:/python_workspaces/python基础语法/文件和路径处理/write.txt
4、os.path.dirname:获取路径目录。dirname()参数是一个路径。
import os # print(__file__) psths = os.path.abspath('write.txt') print(os.path.dirname(psths)) #运行结果 E:/python_workspaces/python基础语法/文件和路径处理
5、os.path.join(a,b):路径拼接
import os # print(__file__) psths = os.path.abspath('write.txt') #在文件和路径处理:E:/python_workspaces/python基础语法/文件和路径处理下创建一个文件write2.txt write2 = os.path.join(os.path.dirname(psths),"write2.txt") print(write2) #open函数调用 with open(write2,encoding="utf8",mode='w') as f: #文件写入 f.write('tuimao2') #运行结果 创建了一个名称为“write2.txt”,内容为 tuimao2的文件
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/280447.html