python文件操作

     作者:小田

     来源:小田学Python

文件操作在编程中是非常常见的,因此这点还是有必要熟悉掌握的。


读文件

要把大象装冰箱,需要分几步?对于读写文件也是这样简单的流程,打开文件、读取文件和关闭文件。


描述符:文件所有操作涉及到描述符,描述符就是一个光标,读取数据可以从光标开始向后依次读,等等。

1、打开文件

open(path, flag[, encoding][, errors])
  • path:要打开文件的路径

  • flag:打开方式

    • r    以只读的方式打开文件,文件的描述符放在文件的开头

    • rb  以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头

    • r+  打开一个文件用于读写,文件的描述符放在文件的开头

    • w   打开一个文件只用于写入,如果该文件已经存在会覆盖,不存在则创建新文件

    • wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,不存在则创建新文件

    • w+ 打开一个文件用于读写,如果该文件已经存在会覆盖,不存在则创建新文件

    • a    打开一个文件用于追加如果文件存在,文件描述符将会放到文件末尾

    • a+

  • encoding:编码方式(一般utf-8)

  • errors:错误处理(一般不处理)

# 小栗子
f = open(path, "r", encoding="utf-8", errors="ignore")
# ignore 忽略错误,一般不写后两个参数

2、读文件内容

# 读取文件全部内容
str1 = f.read() # 读文件比较小的,大的内存放不下


# 读取指定字符数(按字符数)
str2 = f.read(10) # 一个字母和一个汉字都称为一个字符


# 读取整行,包括"\n"字符
str3 = d.readline()


# 读取指定字符数
str4 = f.readline(10)


# 读取所有行并返回列表
str5 = f.readlines()


# 若给定的数字大于0,返回实际size字节的行数
str6 = f.readlines(25) # 例如25个字节,每行存10个,那么此时读取两行


# 修改描述符的位置
f.seek(10) # 改到第几个字符的位置

3、关闭文件

f.close()

4、小栗子

# 一个完整的过程
try:
    f1.open(path, "r", encoding="utf-8")
    print(f1.read())
finally:
    if f1:
        f1.close()


# try...except...else...finally是异常处理的内容,
# 这个例子用到的部分表示,如果打开读取文件部分出错,
# 只要文件存在那么就在最后把文件关闭,这是一个很好的
# 习惯,就比如说在Linux操作系统中,限制打开的文件数
# 不超过1024个如果超过了,文件就打不开

但是仅此,写文件比较繁杂,还有更方便的方法。

# 简单方法:
with open(path, "r", encoding="utf-8") as f2:
    print(f2.read())


# with可以把文件关闭的部分实现,不论我们是否操作,
# 是否有错误,都会在最后帮我们把文件关闭,也避免
# 了我们忘记关文件的困扰

写文件

f = open(path,"w") # 首先以写方式打开文件


# 将信息写入缓冲区,而并没有直接写入文件当中,也就是说我们在写文件时看文件中,没有信息随时写入
f.write("glabscufn")


# 刷新缓冲区(要想边写边存入文件的话可以手动刷新缓冲区)
f.flush() # 直接把内部缓冲区的数据立刻写入文件,而不是被动的等待文件关闭自动刷新缓冲区写入


'''
缓冲区的刷新:
1、文件关闭自动刷新 
2、手动flush刷新 
3、缓冲区满了也可以自动刷新 
4、再有就是遇到'\n'也会刷新
'''


f.close()

编码与解码

1、编码

with open(path, "wb") as f1:
    str = "asdasdasdasd"
    f1.write(str.encode('utf-8')) # 用utf-8编码

2、解码

with open(path, "rb") as f2:
    data = f2.read()
    new_data = data.decode("utf-8")
    print(type(data)) # class<byte>
    print(type(new_data)) # class<str>
# 主要是在有中文的情况下,其他情况不同的码可能也译码正确
# 如果是二进制的字符串,要记得编码解码

list\tuple\dict\set

import pickle # 数据持久性模块,就是把数据存到磁盘


# 写
mylist = [1,2,3,4,5,"sadd"]
f = open(path, "wb")
pickle.dump(mylist, f)
f.close()


# 读
f1 = open(path, "rb")
templist = pickle.load(f1)
print(templist)
f1.close()
◆ ◆ ◆  ◆ ◆

长按二维码关注我们
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:


猜你喜欢
● 笑死人不偿命的知乎沙雕问题排行榜● 用Python扒出B站那些“惊为天人”的阿婆主!● 互联网大佬学历&背景大揭秘,看看是你的老乡还是校友● 上万条数据撕开微博热搜的真相!● 你相信逛B站也能学编程吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值