python如何处理inp文件_Python-文件处理

文件处理

文件操作的作用就是 把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,python提供了 open 关键字来处理 文件的读写。

语法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file参数代表文件名, 如果不带上路径的话,会在当前文件夹里查找, 而 mode参数代表文件的打开模式 ,有如下表所示的几种打开模式

基本流程

# 1. 打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f

f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

# 2. 调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作

data=f.read()

# 3. 向操作系统发起关闭文件的请求,回收系统资源

f.close()

with上下文管理

每次打开文件处理完之后都要 手动关闭文件 ,这样就显得比较繁琐,python 提供给了 with 关键字来帮我们自动关闭文件

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

data = f.read()

print(data)

字符集编码

,如果打开的是文本文件,会涉及到字符编码问题,如果没有为open指定编码,那么打开文本文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

f = open('a.txt','r',encoding='utf-8')

操作文件模式

模式

作用

r

只读模式打开,默认

w

写模式打开,若文件存在,先删除,然后重新创建

a

追加模式打开,追加到文件末尾,seek()指向其他地方也没用,文件不存在,自动创建

b

二进制模式打开

t

文本模式打开,默认

+

可读写模式,可配合其他模式使用,比如r+,w+

x

如果文件已存在,用此模式打开会引发异常

U

通用换行符支持

inp_name = input('请输入用户名: ').strip()

inp_pwd = input('请输入密码: ').strip()

with open(r'db.txt', mode='r', encoding='utf-8') as f:

for line in f:

# 把用户输入的名字与密码与读出内容做比对

u, p = line.strip('\n').split(':')

if inp_name == u and inp_pwd == p:

print('登录成功')

break

else:

print('账号名或者密码错误')

with open('b.txt', mode='w', encoding='utf-8') as f:

f.write('你好\n')

f.write('我好\n')

f.write('大家好\n')

f.write('111\n222\n333\n')

# 强调:

# 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面

# 2 如果重新以w模式打开文件,则会清空文件内容

# a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾

with open('c.txt', mode='a', encoding='utf-8') as f:

f.write('44444\n')

f.write('55555\n')

# 强调 w 模式与 a 模式的异同:

# 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后

# 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后

操作文件的方法

# 读操作

f.read() # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾

f.readline() # 读取一行内容,光标移动到第二行首部

f.readlines() # 读取每一行内容,存放于列表中

# 强调:

# f.read()与f.readlines()都是将内容一次性读入内容,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:

# 方式一

with open('a.txt', mode='rt', encoding='utf-8') as f:

for line in f:

print(line) # 同一时刻只读入一行内容到内存中

# 方式二

with open('1.mp4', mode='rb') as f:

while True:

data = f.read(1024) # 同一时刻只读入1024个Bytes到内存中

if len(data) == 0:

break

print(data)

# 写操作

f.write('1111\n222\n') # 针对文本模式的写,需要自己写换行符

f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符

f.writelines(['333\n', '444\n']) # 文件模式

f.writelines([bytes('333\n', encoding='utf-8'), '444\n'.encode('utf-8')]) # b模式

其他操作

f.readable()

# 文件是否可读

f.writable()

# 文件是否可读

f.closed

# 文件是否关闭

f.encoding

# 如果文件打开模式为b,则没有该属性

f.flush()

# 立刻将文件内容从内存刷到硬盘

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值