Python中的文件操作

Python中的文件操作


文件操作基本流程:

文件操作基本流程:
1.打开文件
2.文件操作
3.关闭文件

在进行文件操作前,先准备要操作的文件/tmp/paswd:
 cp /etc/passwd /tmp/

#1.打开文件
f = open('/tmp/passwd')

#2.文件操作
print(f)

#3.关闭文件
f.close()

可以看到,打开的文件所引用的内存空间f是一个保存了/tmp/passwd文件信息的数据结构
要查看具体的文件内容,要调用相应的文件操作函数,操作如下:
content = f.read()
print(content)

在这里插入图片描述
在这里插入图片描述
打开文件的参数选择:

上面打开文件的语句中,只有操作的目标文件这一参数
而对文件的操作权限这一参数,使用的是默认参数'r'

r
(readonly)默认参数
只能读,不能写
读取文件不存在 会报错
f = open('/tmp/passwd','w')
content = f.read()
print(content)

w
写文件(write only)
只能写,不能读
文件存在的时候,会清空文件的内容并写入新的文件内容(实际上,准确地说是将从文件指针开始后的内容都删除了)
文件不存在的时候,会创建新的文件并写入内容

f = open('/tmp/passwd/','w')
f.write('westos')

需要注意的是,不仅要在打开文件的时候在函数参数中赋予写权限。
同时也要注意,在真实的操作系统中,执行该程序的进程的用户是否有权限对于文件进行操作
因此,在使用该参数之前,要对文件权限进行更改:chmod 777 /tmp/passwd
(这一点,应该是只需要在linux这种多用户的操作系统中注意;在windows等单用户的操作系统中应该是不需要注意的)

a
追加,也不能进行读操作
写:不会清空文件内容,会在文件末尾追加
写:文件不存在的时候,不会报错,会创建新文件并写入内容

w+
可以读,也可以写
写:文件不存在 不报错 会创建新文件并写入
读不存在的文件时,也会将其创建出来
若文件已经存在,会清空原文件(无论读,写操作)

r+
r/w
写操作:不会清空文件
文件不存在 报错(无论读写操作)

a+
r/w
对于不存在的文件会创建出来(无论读写操作)
写操作不会清空文件

以上有+号的参数,均表示即可以读,也可以写
r,w,a三个参数除了在具体的操作上有所不同以外,初始的文件指针指向位置也有不同
r 文件初始位置
w 文件初始位置
a 文件末尾位置

对于一个文件同时进行两次读操作,第二次将无法读取到文件内容,因为文件指针位置改变了(文件指针已经移动到了文件末尾了)

# 判断文件对象拥有的权限
print(f.readable())   # 判断对文件是否有写权限
print(f.writable())   # 判断对文件是否有读权限

# 判断文件指针的位置
print(f.tell())

在这里插入图片描述
处理二进制文件:

上面的参数均是处理文本文件的
应该说,'r'等参数都是默认为'rt'(read txt)参数
即,    r r+ w w+ a a+ == rt rt+ wt wt+ at at+ 左右各个参数是等价的

而如果读取的是 图片 音频 视频(非纯文本文件)
就需要通过二进制的方式读取和写入
二进制文件操作参数: rb rb+ wb wb+ ab ab+

基本应用示例:
将图片hello.jpg文件复制一份到当前目录下

# 读取二进制文件内容
f1 = open('hello.jpg',mode='rb')
content = f1.read()
f1.close()

f2 = open('lucky.jpg',mode='wb')
# 写入要复制的文件的内容
f2.write(content)
f2.close()

在这里插入图片描述
改变文件指针位置:

f = open('/tmp/passwd','rb+')
"""
默认情况下读取文件的内容 
对于小的文件:直接用read读取即可
如果是一个大文件(文件大小>=内存) readline()
"""
# 按行读取
print(f.readline()) #会将每一行末尾的\n也读取

# f.read() 按字节读取,若不传入参数,默认从文件指针位置读取到文件末尾
content=f.read(4)
print(content)

# 读取文件的全部内容,返回一个列表,文件内容的每行是其列表元素
print(f.readlines())

print(f.tell())

# seek():指针的移动
#     第一个参数:偏移量 >0:向后移动 <0:向前移动
#     第二个参数:
#         0:移动到文件开头
#         1:当前位置
#         2:移动到文件的末尾

f.seek(2,0)
print(f.tell())

f.close()

seek移动指针的时候,一定是要用二进制方式打开文件。否则会报错

seek两个参数,先看第二个参数
从第二个参数位置处,根据第一个参数决定从第二个参数位置处的移动量到的最终位置

在这里插入图片描述

上下文管理器:

上下文管理器:打开文件 执行完with语句后 自动关闭文件

写法:
with open('filename') as f:   # with关键字 open函数打开目标文件 as 引用文件的变量:  
	文件操作语句

f = open('/tmp/passwd')
with open('/tmp/passwd') as f:
    print(f.read())
print(f.closed)
使用该语句,结束语句内容后,自动关闭文件

python3中支持一条语句,一行,打开两个文件
而python2则不行

# python3.x
# 将第一个文件的内容写入第二个文件中
with open('data.txt') as f,open('data2.txt','w+') as f2:
    f2.write(f.read())
    f2.seek(0,0)
    print(f2.read())

# python2.x

with open('data.txt') as f:
    content = f.read()
with open('data2.txt') as f2:
    f2.write(content)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值