Python 文件操作

目录

一,文件介绍

1,什么是文件

2,文件的分类

3,文件的作用

4,使用文件流程

二,读写文件简单操作

1、读取文件

2,写文件

3、文件拷贝

三,文件操作

读操作

1, read()

2,readline()

3,readlines()

4,循环读取:文件句柄(文件对象)可以迭代

写操作

1,write()

2,writelines()

四,文件权限

只读的操作

1,r

2,rb

3,r+

写的操作

1,w

2,wb

3,w+

4,a

5,a+

五、其他操作

1,tell()

2,seek()

3,查看文件的名字和模式

4,with 方式

六,乱码问题


一,文件介绍

1,什么是文件

狭义说:文本文件;

广义说:图片,声音,超链接,视频。

2,文件的分类

文件大体可以分为两类,文件文本二进制文件

3,文件的作用

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

4,使用文件流程

(1)打开文件  open()

(2)读写文件  read()   write()

(3)关闭文件  close()


二,读写文件简单操作

1、读取文件

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

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

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

​
file = open('file/a.txt', mode='r')
ret = file.read() # 将文件中的所有内容一次性读出来
print(ret)
# 最后关闭文件
file.close()

​

2,写文件

mode='w' 表示写文件

注意:如果文件不存在,会先自动创建文件(不会创建目录),然后在写内容

file = open('d.txt', mode='w')
file.write('aaaaa')
file.close()

3、文件拷贝

file1=open('file/a.txt',mode='r')
file2=open('file/c.txt',mode='w')
ret=file1.read()
file2.write(ret)
file1.close()
file2.close()

c.txt 拷贝的 a.txt


三,文件操作

读操作

read()

默认把内容全部读取出来

还可以将制定个数的内容读取出来

readline()

读一行\n

还可以将一行里面制定个数的内容读取出来

readlines()

读多行,

将内容全部读取出来,并保存在一个列表中

for line in file:循环读取,文件句柄(文件对象)可以迭代

1, read()

file = open('d.txt', mode='r')
ret = file.read()  # 将文件的全部内容读取出来
print(ret)  # aaaaa
file.close()
 
file = open('d.txt', mode='r')
ret = file.read(3)  # 读出文件的三个字符
print(ret)  # aaa
file.close()

调用read()一次性读取文件的全部内容,如果文件有10G,内存就爆了,会导致程序卡死,

所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。

2,readline()

file = open('d.txt', mode='r')
ret = file.readline()
print(ret)
file.close()
#aaaaa
#
file = open('d.txt', mode='r')
ret = file.readline(3)  # 将一行里面的指定个数的内容读取出来
print(ret)
file.close()
# aaa

3,readlines()

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

# readlines():读多行,把读出来的内容都保存在一个列表中
file = open('d.txt', mode='r')
ret = file.readlines()
print(ret)  # ['aaaaa\n', 'bgfgfgfbf']
file.close()

4,循环读取:文件句柄(文件对象)可以迭代

# 循环读取,文件句柄(文件对象)可以迭代
file = open('d.txt', mode='r')
for line in file:
    print(line)
file.close()
# aaaaa
# 
# bgfgfgfbf
#

写操作

如果文件不存在,会自动创建文件,不会创建目录

write() 
writelines()可以传递一个可迭代的内容

1,write()

先前没有c.txt ,这是自动生成并存储内容的

file = open('c.txt', mode='w')
file.write('wwwww')
file.close()

2,writelines()

# 可迭代内容选的是列表
file = open('f.txt', mode='w')
lst = ['aaa', 'bbb', 'ccc']
file.writelines(lst)
file.close()
# f.txt:aaabbbccc
# 要想让aaa bbb ccc换行的话,在列表里面加'\n'换行符即可
file = open('f.txt', mode='w')
lst = ['aaa\n', 'bbb\n', 'ccc']
file.writelines(lst)
file.close()
# aaa
# bbb
# ccc

四,文件权限

只读的操作

1,r

以只读方式打开文件。文件的指针会放在文件的开头,这是默认模式。

file=open('file/a.txt',mode='r',encoding='UTF-8') # 最后一位参数代表是解码方式
ret=file.read()#将文件中的所有内容一次性读取出来
print(ret)
#最后关闭文件
file.close()

2,rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头,一般用于非文本文件(如图片)等。

file=open('file/Koala.jpg',mode='rb')
ret=file.read()
print(ret)
file.close()

3,r+

打开一个文件用于读写。文件指针将会放在文件的开头

先读后写

file=open('file/c.txt',mode='r+')
#先读
ret=file.read()
print(ret)
#后写
file.write('mmmmmm')
file.close()

先写后读

file=open('file/a.txt',mode='r+')
#先写
file.write('llllll')
#后读
ret=file.read()
print(ret)
file.close()

写的内容会覆盖原来的内容,并把指针指向写的文件的末尾,所以,只能读出来没有被覆盖的内容

读的内容

如果文件不存在,不会自动创建

file=open('file/e.txt',mode='r+')
file.close()

写的操作

1,w

打开一个文件只用于写入,如果该文件已存在则打开文件,并从头开始编辑,即原有内容会被删除

如果该文件不存在,则创建新文件。

file=open('file/b.txt',mode='w')
file.write('csx')
file.close()

# 新建一个文件 并存储csx

2,wb

以二进制格式打开一个文件只用于写入,

如果该文件已存在则打开文件,并从头开始编辑,即原有内容会被删除

如果该文件不存在,则创建新文件。一般用于非文本文件如图片等

file1=open('file/Koala.jpg',mode='rb')
file2=open('file/Koala2.jpg',mode='wb')
ret=file1.read()
file2.write(ret)
file1.close()
file2.close()

3,w+

打开一个文件用于读写。

如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除

如果该文件不存在,创建新文件。

file=open('file/a.txt',mode='w+')
# #先写
file.write('llllllmm')#将原文件中的内容删除重新写
ret=file.tell()
print(ret)
# #后读
file.seek(0,0)
ret1=file.read()#什么都没有
print(ret1)
file.close()

4,a

打开一个文件用于追加

文件已存在

如果该文件已存在,文件指针将会放在文件的结尾。

也就是说,新的内容将会被写入到已有内容之后。

file=open('file/a.txt',mode='a')
file.write('\nazy lmm')
#ret=file.read() 不能读,会报错
#print(ret)
file.close()

文件不存在

如果该文件不存在,创建新文件进行写入。

file=open('file/b.txt',mode='a')
file.write('\nazy lmm')
#ret=file.read() 不能读,会报错
#print(ret)
file.close()

注意:都不可进行读操作

5,a+

打开一个文件用于读写

文件已存在

如果该文件已存在,文件指针将会放在文件的结尾。

文件打开时会是追加模式。

先写后读

file=open('file/a.txt',mode='a+')
file.write('\nazy lmm')#追加完后光标停在末尾
t=file.tell()
print(t)
#后读
ret=file.read()
print(ret) #什么都读不到
file.close()

先读后写

#先读
file=open('file/b.txt',mode='a+')
ret=file.read() #什么都读不到,因为光标在内容的末尾
print(ret)
#后写
file.write('happy')
file.close()

文件不存在

如果该文件不存在,创建新文件用于读写,读写方式同文件存在时一样。

五、其他操作

1,tell()

file = open('b.txt', mode='r')
ret = file.read(2)  # 读两个  aa
print(ret)
print(file.tell())  # 获取光标的位置  2
ret = file.read()  # 读出剩余的全部内容  
print(ret)
file.close()
# a
# bbbccc

2,seek()

移动光标的位置

第一个参数 

offset 

表示移几个位置

第二个参数  

whence

表示相对位置

0----->从开头

1------>从当前位置

2------>从末尾

aaa
bbbccc
#1.
file = open('b.txt', mode='r')
ret = file.read(3)  # 读三个 aaa
print(ret)
file.seek(0, 2)  # 把光标移动到末尾
ret = file.read()  # 把剩余部分全部读出来
print(ret)
file.close()
#aaa
#  会是空,光标末尾没有内容
#2.
file = open('b.txt', mode='rb')
ret = file.read(3)  # 读三个 aaa
print(ret)
file.seek(1, 1)  # 把光标移动到当前位置,跳一个,再开始读
ret = file.read()  # 把剩余部分全部读出来
print(ret)
file.close()
# b'aaa'
# b'\nbbbccc'
#3.
file = open('b.txt', mode='rb')
ret = file.read(3)  # 读三个 aaa
print(ret)
file.seek(-3, 2)  # 把光标移动到末尾,往回退三个,再开始读
ret = file.read()  # 把剩余部分全部读出来
print(ret)
file.close()
# b'aaa'
# b'ccc'

注意:当mode='r'时,seek()的第一个参数必须为0,非0会报错

3,查看文件的名字和模式

file = open('b.txt', mode='r')
print(file.name)  # b.txt
print(file.mode)  # rb
file.close()

4,with 方式

这种方法会自动关闭文件,最后不用写file.close()

相当于:file=open('b.txt',mode='r)

with open('b.txt', mode='r') as f:
    ret = f.read()
    print(ret)
# aaa
# bbbccc

六,乱码问题

乱码问题是读写操作的编码不一致导致乱码

Python编码依赖于平台的编码     GBK

windows操作系统默认用GBK编码

with open('file/c.txt', mode='w',encoding='utf-8') as f:
    f.write('你好,世界')  # 指定用UTF-8编码
'''
乱码问题:
读写操作的编码不一致导致乱码
windows操作系统默认GBK
Python编码依赖于平台的编码   GBK
encoding=    可以指定编码方式  默认编码是GBK
'''
 
with open('file/c.txt', mode='r',encoding='utf-8') as f:
    ret = f.read()
    print(ret)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值