python对文件的相关操作——读写文件、乱码问题

177 阅读7分钟

目录

一.文件介绍

1.什么是文件

2.文件的分类

3.文件的作用

4.使用文件的流程

二.读写文件简单操作

1.读取文件

2.写文件

三.文件权限

四.文件操作

1.读操作 

2.写操作

 3.其他操作

五.with 

六.乱码 


一.文件介绍

1.什么是文件

狭义说:文本文件;广义说:超文本文件, 图片,声音,超链接,视频。

2.文件的分类

文件大体上可以分为两类,文件文件和二进制文件。

3.文件的作用

使用文件的目的是把一些数据存储存放起来。

4.使用文件的流程

我们操作一个文件的流程一般是 打开文件,读写文件,关闭文件。通过程序操作文件的流程也是这三步,首先打开文件,然后读写文件,最后关闭文件。

二.读写文件简单操作

1.读取文件

文件位置:

文件内容:啊!床下有人!

读文件操作:

file = open('file/book.txt',mode='r',encoding='UTF-8')

ret = file.read()
print(ret) # 啊!床下有人!

file.close()

file叫做文件句柄(变量)用来操作文件

第一个参数是文件的路径,

第二个参数 mode=访问文件的模型,r 表示读,默认也是r 模式

第三个参数是读取文件编码格式

2.写文件

file = open('file/story.txt',mode='w')

file.write('aaaaa')

file.close()

mode='w' 表示写文件

注意:如果文件不存在,会自动创建文件(不会创建目录)。

 文件内容:aaaaa

三.文件权限

读取操作r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
写操作w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

四.文件操作

1.读操作 

(1)read()

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,会导致程序卡死,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。

book.txt 中内容是: 123456789

file = open('file/book.txt',mode='r')
ret = file.read() # 将内容全部读取到
print(ret) # 123456789

ret = file.read(3) # 读取三个
print(ret) # 123
file.close()

(2)readline()

readline每次读取一行,并且自带换行功能 每一行末尾会读到\n 

book.txt 中内容是: 1234

                                 5678

file = open('file/book.txt',mode='r')
ret1 = file.readline() # 读取一行
print(ret1)
file.close()
# 1234  换行符被输出一行空行
#
# 5678

(3)readlines()

Readlines,一次性以行的形式读取文件的所有内容并返回一个list,需要去遍历读出来

file = open('file/book.txt',mode='r')
ret = file.readlines() # 将内容全部读取,将内容保存到列表,每一行是一个元素
print(ret) # 返回列表  ['1234\n', '5678']
file.close()

 (4)循环读取

file句柄是一个可迭代的对象因此,可以循环读取文件中的内容,每次读一行。

file = open('file/book.txt')
for line in file:
    print(line) 
'''
1234

5678

'''

2.写操作

(1)write()

file = open('file/book.txt',mode='w')
file.write('zzz')  # book.txt中为 zzz
file.close()  

(2)writeline()

file.writelines(seq)  把seq的内容全部写到文件中(多行一次性写入)。 

file = open('file/book.txt',mode='w')
l = ['1111\n','22222']
file.writelines(l) # 参数 可为 迭代  
file.close()
# book.txt中为
'''
1111
22222
'''

 3.其他操作

(1)tell()

tell获取文件当中当前光标所在的位置

file = open('file/book.txt',mode='r')
print(file.tell())  # 0
ret = file.read(3)
print(file.tell())  # 3
file.close()

(2)seek()

seek移动光标位置

参数:

offset  移动的长度(字节)

whence 相对位置 0从开头(默认),1从当前,2从末尾

file = open('file/book.txt',mode='r')
print(file.tell())  # 0
ret = file.read()
print(ret) # book.txt中所有内容
file.seek(0,2)
ret = file.read() 
print(ret) # 空,当前光标指向内容末端
file.close()

(3)name 和 mode

file.name 返回 路径

file.mode 返回 文件读写模式

file = open('file/book.txt',mode='r')
print(file.name) # file/book.txt
print(file.mode) # r
file.close()

五.with 

使用with方式操作文件,可以不用关闭文件,会自动关闭文件。

with open('file/book.txt') as file:
    ret = file.read()
    print(ret) # book.txt所有内容
ret = file.read()
    print(ret) # 报错 ValueError: I/O operation on closed file.

六.乱码 

python读写文件时,默认使用的编码为平台编码,也就是gbk。

在pycharm中创建的文件默认使用的是utf-8编码。

1.往pycharm中的k.txt中保存内容。

with open('file/node.txt', mode='w') as file:
    file.write('你好中国')  # 默认读写用GBK

在node.txt中出现乱码 

����й�

 2.向磁盘中的文件保存内容,不乱码。

with open('d:/node.txt', mode='w') as file:
    file.write('你好中国')  # 默认读写用GBK

3.指定编码

with open('file/node.txt', mode='w',encoding = 'utf-8') as file:
    file.write('你好中国')  # 默认读写用GBK

成功写入: