博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 学习日记 第八天
阅读量:6305 次
发布时间:2019-06-22

本文共 2238 字,大约阅读时间需要 7 分钟。

日常鸡汤:

  人的一生不能总带着一个地方,起码得去各个地方转转


 

一、初始文件操作:

使用python来读写文件,可以使用open()函数打开一个文件,获取文件句柄,然后通过文件句柄就可以进行各种各样的操作。根据打开的方式不同能够执行的操作也会有相应的差异

二、只读操作(r,rb)

1 f = open("abc.txt",mode='r',encoding='utf-8')2 content = f.read()3 print(content)4 f.close()       5 6 7 #  注意打开 就要有结束  open 之后切记有  close

  这里需要注意encoding表示编码集.根据文件的实际情况保存编码进行获取数据,对于我们而言,更多使用的是utf8

rb  读取出来的数据是bytes类型,在rb模式下,不能选择encoding字符集。

1 f = open("abc.txt",mode='rb')2 content = f.read()3 print(content)4 f.close()5 6 7 # 输出b'aaaaaa\r\nbbbbbb\r\ncccccc'

read()      将文件中的内容全部读取出来 弊端:占内存,如果文件过大,容易导致内存奔溃

read(n)    读取n个字符,需要注意的是,如果再次读取,那么会在当前位置继续去读,而不是从头读。如果使用的是rb模式,则读取出来的是n个字节

readline()  一行一行的读取数据,注意:readline()结尾,注意每次读取出来的数据都会有一个\n,所以,要使用strip() 来去掉\n或者空格

readlines() 讲每一行形成一个元素,放到一个列表中,也是一次性读取,容易出现内存崩溃

循环读取,这种方式是最好的,每次读取一行内容,不会产生内存溢出的问题

1 f = open('abc.txt',mode='r',encoding='utf-8') 2 for line in f: 3     print(line.strip()) 4  5  6  7 # 输出 8 aaaaaa 9 bbbbbb10 cccccc

三、写模式(w,wb)

写的时候,如果没有文件,则会创建文件,如果文件存在,则将原件中原来的内容删除,在写入新的内容

1 f = open('aaa.txt',mode='w',encoding='ust-8')2 f.write("angasdfasdffsdaf")3 f.flush()       # 刷新,养成好习惯4 f.close()    5 6 7 # 创建一个aaa.txt 的文本文档。里面的内容有angasdfasdffsdaf

wb模式,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化为utf-8的bytes数据

1 f = open('aaa.txt',mode='wb')2 f.write("你好".encode("utf-8"))3 f.flush()       # 刷新,养成好习惯4 f.close()

四、追加

在追加模式下,我们写入的内容会追加在文件的结尾

1 f = open('aaa.txt',mode='a',encoding='utf-8')2 f.write("马不啊萨芬")3 f.flush()4 f.close()

五、读写模式(r+,r+b)

  对于读写模式,必须是先读。因为默认光标在开头的,准备读取的,当读完了之后在进行写入,我们以后使用频率最高的模式就是r+

1 f = open("aaa.txt",mode='r+',encoding='utf-8')2 content = f.read()3 f.write("你是我的最爱")4 print(content)5 f.flush()6 f.close()                7 8 # 因为在读取完之后在写入的,所以打印出来的,并没有添加进的那一句,但是文件内容已经被写上了

注意: 在r+ 模式下,必须先是读取,然后在写入 如果顺序出错,则会出现问题

1 f = open("aaa.txt",mode='r+',encoding='utf-8') 2 f.write("你是我的最爱") 3 content = f.read() 4 print(content) 5 f.flush() 6 f.close() 7  8  9 10 #  原文件内容会被覆盖写入,造成原文本的更改

六、写读模式(w+,w+b)

   先将所有的内容清空,然后写入,最后读取,但是读取的内容是空的,不常用,指针在最后所以读取不出来。

七、追加读(a+)

  在a+的模式下,无论是先读的还是后读的,都是读取不到数据的(光标的原因)

八、其他相关操作

1.seek(n) 光标移动到n位置,注意,移动单位是bytes,所以如果是utf-8的中文部分要是3的倍数

2 tell() 可以帮助我们获取到当前光标在什么位置

3.truncate() 截断文件,默认为光标后面的内容全部删除,留光标前的内容

注意:在r+的模式下,如果读取了内容。不论读取内容多少,光标显示的是多少,在写入的时候,都是在末尾进行操作的

 

转载于:https://www.cnblogs.com/Chamster/p/9295558.html

你可能感兴趣的文章
防HTTP慢速攻击的nginx安全配置
查看>>
深入理解PHP内核(十四)类的成员变量及方法
查看>>
Spring Boot2.0+中,自定义配置类扩展springMVC的功能
查看>>
参与博客编辑器改版,我的礼物 感谢51cto
查看>>
JavaWeb笔记——JSTL标签
查看>>
Eclipse插件大全 挑选最牛的TOP30
查看>>
一些实用性的总结与纠正
查看>>
Kubernetes概念
查看>>
逻辑卷管理器(LVM)
查看>>
一个小代码,欢迎大佬的意见,求指正
查看>>
搭建LAMP架构
查看>>
神经网络注意力机制--Attention in Neural Networks
查看>>
Spring.Net+WCF实现分布式事务
查看>>
在Linux上高效开发的7个建议
查看>>
java数据结构 - 数组使用的代码
查看>>
个人简历-项目经验
查看>>
swoole异步任务task处理慢请求简单实例
查看>>
DHCP
查看>>
oracle数据泵导入分区表统计信息报错(四)
查看>>
spring技术内幕读书笔记之IoC容器的学习
查看>>