Python–11、文件
文件的基本操作
使用linux环境文件的更新需要手动下载代码。
1、打开/关闭文件
打开文件:open(文件路径,读取的形式,编码格式)
例:f = open(“a.txt”,‘w’,encoding = ‘utf-8’)
文件路径:字符串的形式
文件处理格式(encoding): utf -8 , gbk
关闭文件: f.close()
不关闭会占用内存,资源浪费
2、读取/写入文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLnRTr70-1580116182010)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200106133433038.png)]
f =open('b','r+',encoding='utf-8')
#读
print(f.read(5)) #读取全部;读指定长度
print(f.readline()) #读取单行
print(f.readlines()) #读取多行内容,以列表的形式返回
#写
f.write("晚上好\n") #写入的只能是字符串,\n换行符也可以进行写入
f.writelines(['列表里面','只能是','字符串序列']) #列表里面只能是字符串序列
f.writelines('写入正常字符串')
f.close()
f1 =open('b','w',encoding='utf-8')
f2 =open('b','r',encoding='utf-8')
f1.write(' i love you ')
f1.flush() #强行把缓存区的数据写入磁盘
#立即刷新缓存
f2.seek(0) #文件指针放在开头位置,从0开始索引
print(f2.read())
print(f2.tell()) #获取当前文件指针的位置
读取:f.read()
写入:f.write("…")
3、二进制处理文件
文件打开模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLbM4MpC-1580116182011)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200106131927126.png)]
# r 文件指针放在开头,只读 read
# r+ 文件指针放在开头,读写
# w 覆盖文件内容,只写 write
# w+ 覆盖读写内容,读写
# a 追加写入,只写 append
# a+ 追加写入,读写
# rb 二进制读,在其他方式后加b 都是二进制的
相对路径
相对路径:当前文件位置进行索引路径
同级目录下:f=oprn('文件名/文件 ')
上级目录:f=oprn(’…/文件名/文件 ')
…是返回上级目录的意思
如果文件路径中有中文,可以在路径前面加个r
例:f = open(r’…/…/play/demo1.py’)
绝对路径
绝对路径:根目录进行文件索引路径
win:C/D/E 等开头的都是绝对路径
例:D:\360下载\下载的各种文件
linux:没有盘符/home/ 开头的路径都是绝对路径
pwd 查看当前所在目录
ls 查看当前所在目录下的所有文件
cd 进入某个文件夹
cd… 返回上级目录
4、 io 流
stringio
(1)、创建io操作:
import io
sio = io.stringIO() 或者 sio = io.BytesIO()
(2)、读取:
sio.getvalue() 或者 sio = getvalue()
(3)、写入:
sio.write(str(i)) 或者 sio.write(b’abc’)
import io #导入模块
#做临时的存储
myio = io.StringIO() #创建对象(open) string 字符串
myio.write('hello,world') #写入数据
print(myio.getvalue()) #读取数据
myio.close() #相当于文件的关闭
# print(myio.getvalue()) #当关闭之后就不能读取到数据了
myioB = io.BytesIO() #创建对象(open) byte 字节
myioB.write(b'\xe4') #字节
print(myioB.getvalue().decode()) #读取数据
myioB.close()
#
# f = open('c.txt','w+',encoding='utf-8') #文件也是一种io流
# print(f)
strinigIO在内存中如同打开文件一样操作字符串,因此也有很多方法,当创建的StringIO调用close()方法时,在内存中的数据会丢失。
b、ytesio
5、上下文管理
(1)、 with … as … 取别名,自动调用close,对于打开的文件会自动保存关闭。
例: with open (file,path,mode =‘r’) as f:
#对f进行一系列操作,也可执行其他操作
(2)、打开多个文件:
with open(file_path, mode = ‘r’) as f1,\
open(file_path, mode = ‘r’) as f2,\
…:
#对f进行一系列操作,也可执行其他操作
跳出with语句块的时候会自动执行f.close().
’ \ ’ 是换行,代码不断,可用于将长语句拆分为多行。
class Test: # 模拟文件的操作,为什么会自动关闭
def __enter__(self):
print('正在调用with') #开头就会运行的部分
return '正在用'
def __exit__(self, exc_type, exc_val, exc_tb):
print("我要退出了") #结尾时候运行的部分
with Test() as test: #进入作用域,这里会使用__enter__方法
print('准备运行')
print(test)
print('运行完毕')
#这里退出作用域,于是执行__exit__方法
print('退出完毕')
运行结果:
正在调用with
准备运行
正在用
运行完毕
我要退出了
退出完毕
6、常见问题处理
7、os 模块
(1)、虚拟机中一些代码的作用:
ls–显示文件的目录 ; cd–进入某个文件 ; pwd–查看上级目录;cat 文件名–查看文件里面的内容;vim 文件名–对文件进行写入 ;写入数据可以使用小写i 或者insert键,退出的时候打个冒号:,再写wq就行; Linux系统运行Python文件–Python 文件名;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iLCjeWul-1580116182012)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200107110637692.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DUgmJNsO-1580116182012)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200107110653741.png)]
import os
print(os.getcwd()) #od.getcwd()获取当前路径
a = os.system('dir') #os.system()执行linux命令
print(a)
print(os.listdir('./')) #一个点是当前目录,两个点是上级目录。os.listdir()为查看目录内容
print(os.listdir('../')) #查看上级目录
os.chdir('../') #更改当前目录,这里返回了上级目录
print(os.getcwd()) #显示当前目录
os.chdir('../../') #这里返回了上两级目录
print(os.getcwd())
print(os.listdir('./'))
b = os.path.join('E','Python练习','座位表')
print(b)
os.remove('c.txt')
a = os.path.basename(r'D:\123')
# os.path.basename 可以拿到路径的最后一个文件名
#os.path.dirname() 可以拿到除了最后一个文件外的其他全部文件
print(a)
file = r'D:\123'
a = os.path.getatime(file) #访问时间
print(os.path.getmtime(file)) #修改时间
print(os.path.getctime(file)) #创建时间
print(os.path.exists(r'D:\123')) #判断文件是否存在
print(os.path.isdir(r'D:\123')) #判断是否为目录
print(os.path.isfile(r'D:\123')) #判断是否为文件
print(os.path.isabs(r'D:\123')) #判断是否为绝对路径
tmtime(file)) #修改时间
print(os.path.getctime(file)) #创建时间
print(os.path.exists(r’D:\123’)) #判断文件是否存在
print(os.path.isdir(r’D:\123’)) #判断是否为目录
print(os.path.isfile(r’D:\123’)) #判断是否为文件
print(os.path.isabs(r’D:\123’)) #判断是否为绝对路径