学习Python的day.12

文件操作

操作文件:读文件写文件

读文件:

1、以文本方式去读(字符串)

2、以二进制方式去读(字节)

写文件:

1、以文本的方式去写(字符串)

2、以二进制的方式去写(字节)

写文件:文件写入的内容分为两种情况,第一种是覆盖,第二种是追加:
(1)覆盖:意味着会把文件原先的内容删掉,然后在进行内容的写入
(2)追加:原先的内容保持不变,只是在文件末尾追加写入的内容

假如你打开文件,光标一定会在文件内容的开始。假设现在文件有100个字符串, 第一次读了20个字符,第二次再去读的时候从第一个21个字符开始读,直到读到文件末尾结束。

在Python中提供了一个函数来进行操作文件 --- open()
open:打开一个文件,但是你可以用多种方式打开文件:

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

open中的参数:file: 文件(路径+文件名) *
                          mode: 打开文件的方式 *
                          buffering: 缓存
                          encoding: 编码 *
                          errors: 错误处理的方式
                          newline: 新行
                          closefd: close file descriptor: 关闭文件描述符

open的功能:Open file and return a stream --- 打开一个文件并返回一个流(文件流),所以我们真正操作的就是流对象。

open()中的参数mode可以有哪些值:都是字符串
---------------------------------------------------------------------------------------
'r'       open for reading (default)
          以读的方式打开(默认的)
'w'       open for writing, truncating the file first
          以写的方式打开,先清空文件的内容
'x'       create a new file and open it for writing
          创建一个新的文件并以写的方式打开
'a'       open for writing, appending to the end of the file if it exists
          a: append, 以追加的方式去写
'b'       binary mode
          二进制
't'       text mode (default)
          文本(默认)
'+'       open a disk file for updating (reading and writing)
          打开去更新(读和写)一个磁盘文件
---------------------------------------------------------------------------------------

default:意味着是它默认的打开方式,所以可以不用写

注:打开一个文件,如果操作完成后,记得一定要关闭文件流。

1、去读取file_test.txt中的内容
1.以文本的方式去读

#打开文件
file_obj = open("file_test.txt", "rt", encoding="utf-8")
# file_obj:是一个流的对象
str_data = file_obj.read()
#关闭文件
file_obj.close()
print(str_data)

2、以二进制方式去读

file_obj = open("file_test.txt")
# file_obj:是一个流的对象
str_data = file_obj.read()
#关闭文件
file_obj.close()
print(str_data)

 2、去写入file_test.txt中的内容

要加入encoding,关键的原因在于我们要操作中文,如果你的操作的是ASCII所支持的,那么就不需要。

1、以文本的方式去写文件

file_obj = open("file_write.txt", "w", encoding="utf-8")
file_obj.write("现在的时间是下午3:48")
file_obj.close()
file_obj = open("file_test.txt", "w", encoding="utf-8")
file_obj.write("现在的时间是下午3:48")
file_obj.close()

注:以文本的方式去写的时候,如果文件不存在会去创建一个文件。

practise:手动创建一个文件:file1.txt --- 填充内容:用代码操作的第一个文件

操作过程:复制这个文件,先以文本读的方式,读取文件内容,然后以文本方式写入另一个文件file2.txt->file2.txt的内容和file1.txt内容一致。

追加, 以文本的方式去追加。

file_obj = open("file_test.txt", "a", encoding="utf-8")
file_obj.write("今天是2021年10月23日")
file_obj.close()

以上两种方式主要是针对的是文本文件,电脑里边存储的文件:不仅限于文本文件,图片, 视频,音频,除文本之外的文件,我们使用二进制的方式去读,使用二进制的b的时候,必须携带读或者写的方式。

以下是对媒体文件的操作:

file_obj = open("1.jpg", "rb")
data = file_obj.read()
file_obj.close()
print(data)
print(type(data))
#以二进制的形式打开图片
file_obj = open("2.jpg", "wb")
file_obj.write(data)
file_obj.close()

复制图片:

file_obj = open("file_test.txt", "rb")
data = file_obj.read()
file_obj.close()

file_obj = open("file_test_copy.txt", "wb")
file_obj.write(data)
file_obj.close()

读取的方式:

以文本的方式去读的时候:read(n): n代表的就是读取3个字符---默认情况:n = -1, 意味着读取文件中的所有字符。

data = file_obj.read(3)

readline(n): 读取一行内容---readline(n) n = -1 默认读取一行---readline(n) 代表的是读取一行内容的前n个字符。

data = file_obj.readline(3)
file_obj.readline()

readlines: 读取多行---readlines(hint): 默认情况: hint=-1, 读取所有行---返回的是一个列表:列表中的每一个元素,代表一行。

data = file_obj.readlines(10)

 hint: 读取hint个字符所在的行。

able: callable, readable------able认为就是是否它具备了一种能力

file_obj.readable()  
# 返回值肯定是True或者False
file_obj.close()
print(data)

写与读同样:

是否具备写的能力:

file_obj.writable()

写多行:

writelines(list) 
file_obj.writelines(["111\n", "222\n", "333"])

连接字符:

list_data = ["111", "222", "333"]
# 字符串的.join方法:使用一个字符串去连接列表中所有元素
print("\n".join(list_data))

群体换行:字符串的.join方法:使用一个字符串去连接列表中所有元素

file_obj.writelines(["111\n", "222\n", "333"])
#单项换行
file_obj.write("\n".join(["111", "222", "333"]))
#多项换行

输出:def print(*args, sep=' ', end='\n', file=None):

file_obj = open("print_file.txt", "w", encoding="utf-8")
print("这是print的输出内容", file=file_obj)
file_obj.close()

之前我们写操作文件的时候,无论你去读文件或者去写文件,最后一步都是关闭文件
with的关键字,来帮我们去自动关闭,不需要我们去关闭文件了。 所以建议你们后边如果要操作文件的时候,使用with关键字。

with open("print_file.txt", encoding="utf-8") as file_obj:
    data = file_obj.read()
print(data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值