文件
文件分为文本文件和二进制文件,我们可以这样记忆:除文本文件之外的都是二进制文件
文件操作
文件操作就是对文件进行打开,读写,关闭
open()
注:这种打开方式需要手动进行关闭文件
我们可以使用open()这个函数进行文件的打开
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file:必需,文件路径(相对或者绝对路径)mode:可选参数,默认为'r'(只读模式)。这个参数指定了文件的打开模式buffering:可选参数,默认为-1。这个参数设置缓冲策略-1:使用默认的缓冲策略(对于文本文件是行缓冲,对于二进制文件是全缓冲)0:无缓冲(数据直接写入文件或直接从文件读取,不使用内存缓冲)1:行缓冲(只在文本模式下有效)- 一个
大于1的整数:指定缓冲区大小(以字节为单位)
encoding: 一般使用utf8errors:报错级别newline:区分换行符closefd: 传入的file参数类型opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符
t = """
hello world
welcome to my world
"""
file = open('./text.txt',mode='w')
file.write(t)
file.close()
with open() as f:
- 等价于
f = open()
- 这是
python中可以自动关闭文件的内置函数,也是文件操作中最为常用的
我们要打开demo1.txt文本文件
filename1 = './demo1.txt'
with open(filename1,encoding='utf-8') as f: #mode的参数默认是r,读
content = f.read()
print(content)#会打印出demo1.txt中所有的内容
文件的打开模式
| 打开模式 | 效果 |
|---|---|
r | 以读方式打开,文件必须存在 |
w | 以写方式打开,文件不存在则创建,存在清空原有内容 |
a | 以追加模式打开,文件不存在则创建,存在则继续进行写操作 |
r+ | 以读写模式打开,文件必须存在 |
w+ | 以读写模式打开文件,不存在则创建,存在清空原有内容 |
a+ | 追加并可读模式,文件不存在则创建,存在则继续进行写操作 |
rb | 以二进制读模式打开 同r |
wb | 以二进制写模式打开 同w |
ab | 以二进制追加模式打开 同a |
rb+ | 以二进制读写模式打开 同r+ |
wb+ | 以二进制读写模式打开 同w+ |
ab+ | 以二进制读写模式打开 同a+ |
文件对象fp与文件交互的常用方法
| 调用方法 | 描述 |
|---|---|
fp.read() | 会读取文件中的所有内容,作为一个字符串返回 |
fp.read(n) | 会读取文件中的n个字符,作为一个字符串返回,并且会移动游标 |
fp.readline() | 会读取文件中的一行内容,作为一个字符串返回,并且会移动游标 |
fp.readlines() | 将文件中的每行内容作为一个字符串存入列表中,并返回该列表 |
for i in fp | 会遍历文件中的每一行 |
fp.write(str) | 在可写文件的当前位置将str的内容写入 |
fp.writelines(seq对象) | 在可写文件的当前位置写入给定序列的每个字符串。 |
print(data, file=fp) | 将data变量中的内容,重定向到文件中 |
with open("./text.txt",mode="a+") as fp:
l1 = ["1123\n","open"]
fp.writelines(l1)
read()
读取的时候,会有光标移动,即读取完一部分数据后,就会继续往下进行读取
eg:
我们要读出demo1.txt中的内容
filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8')as f: #t是文本文件模式,是默认的,可以不写
content = f.read() #会默认读取文件的全部内容
print(content) #会打印出demo1.txt中所有的内容
读取大文件方式
对于read(),如果我们要读取很大很大的文件内容,那么就要设置每次读取的字符大小,否则就会导致内存溢出。当我们设置了读取字符大小的限制后,就可以使用while循环去接收整个文件内容。当全部读取完之后,再进行读取时,就会是空(我们可以利用这个条件去结束循环)
filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8') as f:
c = 3
all_content = ""
while 1:
content = f.read(c)
if not content:
break
all_content += content #进行字符拼接
print(all_content) #会打印出demo1.txt中的所有内容
readline
读取一行
filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8') as f:
content = f.readline()
print(content)
readlines
一行一行进行读取,一次性将读取的内容存储到list列表中
filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8') as f:
content = f.readlines()
print(content) #会打印出一个列表,列表中的内容是文件内容
write()
write() 括号内部需要传递一个字符串。有返回值,返回的是你写入的字符串的长度
mode参数:
w 可写,会覆盖文件,文件不存在会创建文件
a 追加,文件不存在会创建文件
filename1 = './demo2.txt'
with open(filename1,mode='wt', encoding='utf-8') as f: #会进行覆盖
f.write('你好,我叫华子')
filename1 = './demo2.txt'
with open(filename1,mode='at', encoding='utf-8') as f: #会进行追加
f.write('你好,我叫QQ糖\n')
二进制文件
所有的文本文件之外的都叫做二进制文件,二进制文件读取时以字节的形式进行读取
注:utf-8指向文本文件,所以二进制文件不能指定utf-8
t 文本文件模式(默认)
b 二进制文件模式
rb 读取二进制文件
fileName = r'C:\Users\EDY\Desktop\陈奕迅 - 不要说话.mp3'
with open(fileName,'rb')as f: # 读取
new_path = 'qq.mp3'
with open(new_path,'wb')as new_f: # 写入新文件
c = 1024*100 #以字节的形式读取
while 1:
content = f.read(c)
if not content:
break
new_f.write(content)
fileName = r'C:\Users\EDY\Desktop\陈奕迅 - 不要说话.mp3'
with open(fileName,'rb')as f: # 读取
new_path = 'qq.mp3'
with open(new_path,'ab')as new_f: # 追加,写入新文件
c = 1024*100
while 1:
content = f.read(c)
if not content:
break
new_f.write(content)
1160

被折叠的 条评论
为什么被折叠?



