文件的读写操作

数据的保存:
1.内存:常用的变量都是在内存里面的
2.文件:文本内容、二进制的文件内容
3.数据库:保存

读文件:

1.要读取的文件,路径一定要存在。
2.打开存在的文件:open函数
参数1:文件的路径,相对的,绝对的
参数2:打开文件的模式,相对的,绝对的
编码:encoding=”utf-8”
3.操作文件的内容,读、写(把原有内容清空再写)、追加(原有内容不变,在它的最后面写上新的内容)
4.文件关闭掉
绝对路径:从盘符开始完整的路径
相对路径:在当前的目录下,以它为根目录,使用相对路径进行查找

判断文件在不在;查看当前位置

>>> import os.path
>>> os.path.exists("e:\\a.txt")			#判断文件是否存在
True
>>> os.getcwd()						#查看当前文件位置
'C:\\Users\\Administrator.THEEND-PC'
>>> if os.path.exists("e:\\a.txt"):
...     print("文件存在可以操作!")
...
文件存在可以操作!
>>>
>>> fp=open("e:\\a.txt","r",encoding="utf-8")
>>> fp.read()			         	     **#读取文件全部内容**
'\ufeff光荣之路\npython\n3.0'
>>> fp.seek(0.0)			             **#返回文件最开始**
0.0
>>> fp.close()

close:

1.文件不关闭,写入的内容太少,实际写的内容并不会立刻写到磁盘,其他打开文件操作可能会受限
2.写入场景:一次写不多的内容,比如:100个字,操作系统会把内容存到内容,不写入文件。什么写入呢?要等待写入的内容到一定量,64K才会写入。
3. fp.flush() #立刻写入文件的方法
4.close之后,这个把所有待写入的内容保存到文件中。

程序中不close会有什么影响:
1.python程序在执行完毕会自动close
2.对于服务器端,不close,可能造成数据不真正写入文件
3.对于服务器端,每次不close,会把文件句柄(node)占用光,操作系统上打开文件是有限的,65535个,达到node65535个,操作系统就死掉了,句柄耗尽,

结论:读写文件一定要close
句柄:指向磁盘文件在内存或磁盘上的位置指标。

测试服务器端:服务器端的程序是一直在执行,死等用户请求。尽管你可能不来,永远不会自动close
新建文件的时候,默认保存时ANSI编码(GBK),然后也可以选择utf-8.

#-*- coding:utf-8 -*-
fp1=open(“e://a.txt”,”r”,encoding=”gbk”)
info1=fp1.read()
print(“字符串类型:”)
print(type(info1))
print(“字节类型:”)
print(type(infol.encode(“utf-8”)))	#编码为utf-8格式字节类型
fp2=open(“e://b.txt”,”w”,encoding=”utf-8”)
fp2.write(infol)
fp1.close()
fp2.close()

问:不关闭会怎么样?
会有内存泄漏,但如果python进程结束就会被释放,但对于服务器来说,这种情况会越来越多,操作内存打开句柄的数量有限。
fp.readline() #每次会读一行;数据量很大可以用这个;优点:省内存; 缺点:速度快
fp.tell() 告诉你读到什么位置了(游标(是根据字符算的)的位置,)

>>> fp=open("e:\\a.txt","r",encoding="utf-8")
>>> lines=fp.readlines()
>>> lines[1]		查看索引1 的行数,第二行
'python\n'
>>> lines[0]		查看索引0行号的内容,第一行
'\ufeff江苏南京\n'

请统计文件的行数,不允许使用readlines计算行数

>>> fp.seek(0.0)
0.0
>>> count=0
>>> while fp.readline():
...     count+=1
...
>>> print(count)
3
>>> fp=open("e:\\a.txt","w",encoding="utf-8")		#打开文件
>>> fp.write(1111)							**#写文件必须是字符串形式,不能是整型**
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: write() argument must be str, not int
>>> fp.write(str(11111))		
#w,会清空文件再写入;a:会把写入的内容,追加到文件的最后一行
#还不会写入内容
5
>>> fp.flush()
#把当前缓存中的内容写到文件里
>>>

R+ :同时启动读模式和写模式;保留原有内容后,进行读写的模式
W+ :先清空所有内容,再写入(慎用);清空原有内容后,进行读写的模式
a+:保留原有内容后,进行读写的模式,且写入内容永远在文件的最后一行
open函数,如果没有写模式,默认是r模式,也就是写模式
没有写编码,那么就是GBK

>>> fp=open("e:\\a.txt","a",encoding="utf-8")		#a,在尾部追加
>>> fp.write("gloryroad")
9
>>> fp.write("gloryroad")
9
>>> fp.write("gloryroad123")
12
>>> fp.close()	#关闭后,才能看到文件中的写入
>>>

效果:不会转行
转行:

>>> fp=open("e:\\a.txt","a",encoding="utf-8")
>>> fp.write("hi123\n")
6
>>> fp.write("hi456\n")
6
>>> fp.close()

R+:会覆盖前面

>>> fp=open("e:\\a.txt","r+",encoding="utf-8")
>>> fp.write("光荣之路")
4
>>> fp.close()

只有写入,没有插入,把前面和后面都读了,中间插入

插入:

>>> fp=open("e:\\a.txt","r+",encoding="utf-8")
>>> two_word=fp.read(2)
>>> two_word
'光荣'
>>> last_two_word=fp.read(2)
>>> last_two_word
'之路'
>>> fp.seek(0.0)
0.0
>>> fp.write(two_word+"gr"+last_two_word)	
#先把前俩字母读了,再把后俩字母读了,然后中间插入
6
>>> fp.close()
>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值