数据的保存:
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()
>>>