1.文件的基本操作
打开关闭文件
打开文件:1)f=open(file_path,mode='r') 传入表示文件路径的字符串,mode是文件打开方式,默认是'r',该句会返回一个文件 对象
2)with open(file_path) as f 把文件对象传给f(推荐)
关闭文件:f.close 调用文件对象的close方法
<_io.TextIOWrapper name='file.py' mode='r' encoding='UTF-8'> <_io.TextIOWrapper name='file.py' mode='r' encoding='UTF-8'>
文件打开方式
其他模式:rb rb+ wb wb+ ab ab+
加个b的作用:以二进制的格式打开文件,进行上述操作 。
读取/写入文件
注意:文件读取完后光标移动到文尾,再读取则为空白。
若想重新读取,需要用f.seek(0)将光标移动到文首
读文件实例
with open('mypython.py') as f: content = f.read() #读取全部内容 print(content) #输出内容(代码) content2 = f.read() print(content2) #无任何输出,文件已经读取完 f.seek(0) #光标移动到文首 con = f.read(10) #读取10个字符 print(con) #输出读到的10个字符 con2 = f.read() #只要文件没读完便可继续读 f.seek(0) cont = f.readline() #读取一行 print(cont) #输出读到的一行 f.seek(0) conten =f.readlines() #读出一个列表,每一项是一行 print(conten)
写文件实例
with open('mypython.py','w') as f: #以只写方式打开文件,写入的内容会覆盖掉原内容 content = '文件第一行' f.write(content) #写入文件 f.flush() #刷新缓存,必要的一步,以免内容丢失 f.close() #关闭文件 with open('mypython.py','a') as f: #以追加方式打开文件,内容追加到文尾 content = '文件第二行' f.write(content) f.flush() f.close() with open('mypython.py','w+') as f: content = '文件第一行' f.write(content) f.flush() f.seek(0) #切记要移动光标,不然读的内容为空 con=f.readline() print(con) f.close()
文本模式与二进制模式
1)文本模式
以str字符串形式写入,读取出的也是str文件
2)二进制模式
以bytes字符串形式写入,读取出来的也是bytes字符串
2.StringIO与BytesIO
即是假文件,暂存于内存中,用于临时使用,关闭后数据全部丢失
首先导入io模块
import io
文本模式:f = StringIO()
二进制模式: f = BytesIO() 均创建空文件f
例:
import io f = io.StringIO() f.write('第一行\n第二行') print(f.getvalue())
第一行
第二行
3.上下文管理
即第二种打开文件的方法
with...as..
单个文件:with open(file_path, mode='r') as f: # 跳出with语句快的时候自动执行f.close()
多个文件:with open(file_path, mode='r') as f1,\ #一行放不开用\分割
open(file_path, mode='r') as f2,\
… :
4.常见问题处理
文件访问编码
open(file_path, mode='r', encoding='utf-8')
文件打开编码若和文件写的编码不一致会出现乱码
以下两个模块是对操作系统的文件进行的操作,也就是虚拟机下的文件
os模块的目录及文件操作
os模块的路径操作
使用前需导入os模块 import os
例:遍历某目录下的所有文件和文件夹
import io import os filelist = list() #文件列表 directorylist = list() #文件夹列表 def traverse(path): #遍历文件的函数 if os.path.isfile(path): #是文件,写入文件链表 filelist.append(os.path.basename(path)) else: #不是文件,写入文件夹列表,后遍历文件夹下的文件 li=os.listdir(path) for i in li: #循环遍历文件夹下的文件 if os.path.isdir(i): directorylist.append(os.path.basename(i)) traverse(os.path.join(path,i)) #路径合成 file = traverse('/home/pyvip/py_case') #遍历文件 print('文件:',filelist) print('文件夹:',directorylist)
文件: ['file.py', 'fity.py', 'mypython.py', 'city.py', 'newfile.py', 'new.py', 'newfile.py'] 文件夹: ['a', 'venv']
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。