9. 文件操作

1. 文件的两种打开方式

方式一:打开后复制给句柄,句柄操作文件

句柄   =   oopen(文件路径,操作模式,编码格式)

其中操作模式有三种:

r    只读模式   只能读不能写

w   只写模式   只写不能读

a    只追加模式   文件数据末尾添加内容

 方式二:使用with关键字,自动打开和自动关闭文件

2. 文件的读写方式

2.1   r 只读模式   

只能读不能写

文件不存在时会报错

with open('a.txt', 'r', encoding='utf-8') as f:
    data = f.read()

2.2   w   只写模式 

只能写不能读

文件不存在时会自动创建一个文件

w模式又称覆盖写模式,每一次写入数据时都将文件原本的内容清空,再写入新的数据

with open('c.txt', 'w', encoding='utf-8') as f:
    f.write('Lionel Messi')

2.3   a    只追加模式

如果文件不存在则新建文件并写入数据

文件数据末尾添加新的数据

with open('d.txt', 'a', encoding='utf-8') as f:
    f.write('Neymar')

3. 文件的操作方式

3.1    + 模式

让原本的模式扩展出新的模式

r+    既能读又能写     这种模式下的写是覆盖写

 w+  既能写又能读

不建议采用  + 模式,对于一个文件来说要么就是向其中写入数据,要么就是从其中读取数据

3.2    b模式

二进制模式   可以操作任意类型的文件

r     rb    b不可省略

w   wb   b不可省略

a    ab   b不可省略

1. 该模式可以操作任意类型的文件

2. 该模式一定不能指定encoding参数 

3.  该模式读写都是以byte类型(二进制)为最小单位

 将以上读取到的二进制数据写入到一个新的文件

 3.3  文件读写代码举例

# 先写入一个列表
# num_list = [1, 2, 3]
# write() argument must be str, not list
# with open("1.text", "w", encoding="utf-8") as fp:
#     fp.write(str(num_list))

# 再读取出来
# with open("1.text", "r", encoding="utf-8") as fp:
#     data = fp.read()
# print(data, type(data))  # <class 'str'>

# with open("2.text","a",encoding="utf-8") as fp:
#     fp.write("dream|521|666" + "\n")

'''
user_data = {}
with open("2.text", "r", encoding="utf-8") as fp:
    data = fp.read()
for i in data.split():
    username, password, hobby = i.split("|")
    user_data[username] = {
        "username": username,
        "password": password,
        "hobby": hobby
    }
print(user_data)
'''

4. 文件操作的内置方法

4.1  r模式的内置方法

f.read()  一次将内容全部读取出来

 f.readline()     只读取一行的数据

 f.readlines()   读取所有数据,但是每一行数据是列表中的一个元素

 for i  in f:   句柄可以被遍历,遍历得到的每一个元素是行

 f.readable()  判断当前句柄对象是否可读

 4.2 w模式的内置方法

f.write()  一次将所有内容全部写入

f.writelines(列表)   将列表中的每一个元素首尾拼接后一次写入

f.writeable()    判断当前句柄对象是否可写

在没有退出with语句之前,连续write是可以持续写入数据的

 5. 控制文件内指针移动

(1)前言

 (2)read的参数

read里面的数字可以控制当前读取内容的字符个数,并且从头开始读

数字默认是-1,从头读到尾

 (3)seek移动指针

 seek(offset,whence)

offset移动几个几个字节

whence移动模式:

0:默认的模式  按照文件开头作为参照,向后移动指定字节数   支持文本和二进制

1:按照当前所在位置作为参照,向后移动指定字节数     只支持二进制

2:按照文件末尾作为参照,向后移动指定字节数     只支持二进制

 1模式只能用在二进制数据上,文本数据不支持相对移动

控制光标移动到指定位置的时候写入数据,是从当前字节位置覆盖写入内容

一个中文字符占3个字节,如果写入的时候恰好是中文并且写入得不够3个字节就会导致乱码

 

posted @ 2024-07-23 22:01  hbutmeng  阅读(3)  评论(0编辑  收藏  举报