python文件处理

python文件处理


1、什么是文件

  应用程序产生的数据首先存在内存上,内存是通过电磁进行工作的断电则数据丢失,想要数据永久存储则需将数据存放在硬盘里。硬盘是计算机的硬件之一,应用程序不能直接操作硬件,应用程序操作硬件需要调用操作系统间接操作硬件。
  文件就是操作系统提供给应用程序操作硬盘的虚拟概念(接口)。

2、文件的读写流程

2.1 打开文件

f = open(path+filename,mode="rt",encoding="utf-8")

path+filename:文件的路径+文件名字
	绝对路径:
		windows:从某个盘盘开始,比如 "D:\python\a.txt"
				注:“\”在python字符中表示转义字符,若路径中出现\n等,则路径不成立。
				替代方式:
					方式一:r"D:\python\a.txt",字符串前加 r 表示防止转义
					方式二:"D:/python/a.txt",用右斜杠代替左斜杠
					方式三:"D:\\python\\a.txt",用左双斜杠代替左斜杠
		linux:从根目录或者从家目录开始
				/home/gsf/a.txt
				/data/a.txt
	相对路径:
		以python文件为参照,比如说a.txt和python文件在同一个目录下面,则path+filename的相对路径为"a.txt",就不需要写前面的"D:/python/"
		
mode:文件读写内容,文件读写操作
	文件读写内容:t,b               默认为t
	文件读写操作:r,w,a,r+,w+,a+    默认为r

encoding:读写文件的编码方式

2.2 读/写

open打开文件只是返回一个文件对象(_io.TextIOWrapper),此时相当于文件对象与硬盘上的文件建立一个联系,真正操作文件需要对文件对象进行读和写。

读文件的方法:
	read()         读取整个文件内容(大文件,内存消耗大,可能导致程序崩溃)
	readline()     读取一行文件内容
	readlines()    读取整个文件内容,返回一个列表,列表的每一个元素便是一行文件内容(大文件,内存消耗大,可能导致程序崩溃)

写文件的方法:
	write()          写入一个字符串
	writelines()     写入一个列表,但列表元素都为字符串

2.3 关闭文件

关闭文件回收系统资源
每个系统打开文件的数量个数有限,若超过限度系统非常卡顿,同时打开多个文件并且没有关闭内存开销也非常巨大。
方法:
	close()

2.4 实例

f = open("a.txt",mode="r",encoding="utf-8")
f.read()
f.close()

3、with 上下文管理

使用with上下文管理,不再需要close()方法关闭文件,with会帮我们关闭文件,并且with可以同时管理多个文件。

with open("a.txt",mode="r",encoding="utf-8") as f:
    pass

with open("a.txt",mode="r",encoding="utf-8") as fi ,\
    open("w.txt",mode="r",encoding="utf-8") as fo :
    pass	

4、文件处理模式

4.1 文件读写操作

模式内容备注
r只读模式默认模式,若文件不存在报错。指针在行首
w只写模式若文件存在,则先清空文件所有内容,再写入新内容;若文件不存在,则建立文件。指针在行尾
a只追加写模式若文件不存在则报错;若文件存在则在末尾添加内容。指针在行尾
r+可读可写与r模式相同,增加可写
w+可读可写与w模式相同,增加可读
a+可读可写与a模式相同,增加可读
4.1.1 实例一:r
a.txt 文件内容:
gsf:123
tom:456
# 登录小程序
print("欢迎来到登录页面")
ip_name = input("请输入用户名>>>:")
ip_passwd = input("请输入密码>>>:")
with open("a.txt",mode="r",encoding="utf-8") as f:
    for line in f:
        name,passwd = line.strip().split(":")
        if ip_name == name and ip_passwd == passwd:
            print("{}登录成功!!!".format(name))
            break
        else:
            print("用户名或者密码错误!!!")
4.1.2 实例二:w
# 写入一个新文件
with open("b.txt","w",encoding="utf-8") as f:
    f.write("haha\n")
    f.writelines(["1\n","2\n","3\n"])
4.1.3 实例三:a
# 注册小程序
print("欢迎来到注册页面")
name = input("请输入用户名>>>:")
passwd = input("请输入密码>>>:")
with open("a.txt",mode="a",encoding="utf-8") as f:
    f.write("{}:{}\n".format(name,passwd))

4.2 文件读写内容

模式用法
t操作文本内容(字符串)
b操作二进制neir

t(默认的):文本模式
   1. 读写文件都是以字符串为单位的
   2. 只能针对文本文件
   3. 必须指定encoding参数
b:二进制模式:
   1.读写文件都是以bytes/二进制为单位的
   2. 可以针对所有文件
   3. 一定不能指定encoding参数
注:t,b不能单独使用,平时使用的r,w,a,其实是rt,wt,at.

5、文件操作方法

5.1 读

文件读的方法能在r,a,r+,w+,a+模式下可以使用

方法用法
read读取所有内容,执行完该操作后,文件指针会移动到文件末尾
readline读取一行内容,光标移动到第二行首部
readlines读取每一行内容,存放于列表中
# a.txt 的内容:
#     gsf:123
#     tom:456

with open("a.txt","r",encoding="utf-8") as f:
    res = f.read()
    print(res)     # gsf:123
                    # tom:456

with open("a.txt","r",encoding="utf-8") as f:
    res1 = f.readline()
    print(res1)             # gsf:123
    res2 = f.readline()
    print(res2)             # tom:456


with open("a.txt","r",encoding="utf-8") as f:
    res = f.readlines()
    print(res)  # ['gsf:123\n', 'tom:456\n']

5.2 写

方法用法
write写入一个字符串
writelines写入一个列表,列表元素都为字符串

注:当文件读写内容模式为b时,在写的时候字符串得转换成字节才可写入,否则报错。

5.3 其他操作方法

方法用法
readable判断文件是否可读
writable判断文件是否可写
closed判断文件是否关闭
encoding获取文件编码,如果文件打开模式为b,则没有该属性
flush立刻将文件内容从内存刷到硬盘
name获取文件名字

6、文件指针 seek

前面的操作模式都是被动触发指针移动,有些特殊场景需要读取某些位置内容,有时则写入特殊位置,这个时候则需要我们自己控制指针。
seek操作指针是以字节为单位。

语法:
   seek(指针移动的字节数,模式)

模式内容
0以文件开头为参照
1以当前指针所在的位置为参照
2以文件末尾的位置为参照

强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

# a.txt 的内容:
#     holle world!
with open('a.txt','rt',encoding="utf-8") as f:
    f.seek(6,0)
    res = f.read()
    print(res)     # world!

with open('a.txt','rb') as f:
    f.seek(-6,2)
    res = f.read()
    print(res)     # b'world!'

with open('a.txt','rb') as f:
    res = f.read()
    print(res)       #  b'holle world!'
    f.seek(-6,1)
    res1 = f.read()
    print(res1)      # b'world!'
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童话的python之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值