python学习笔记---文件的操作

时间:2023-03-09 07:24:51
python学习笔记---文件的操作
数据的保存:
1.内存:常用的变量
2.文件:文本内容,二进制的文件内容
3.数据库:
读文件:
1.要读取的文件路径一定要存在。
2.打开存在的文件:open函数
   参数1:文件的路径,相对的或者是绝对的
   参数2:打开文件的模式,r\w\a
   参数3:encoding="utf-8"
3.操作文件的内容,读、写(把原有的内容清空在写),追加(原有的内容不变,在它的最后面写上新的内容)
4.文件关闭掉
新建文件默认保存的是ansi编码(gbk)
然后也可以选择utf-8
相对路径:在当前的目录下,以它为根目录,使用相对路径进行查找
例如:在e:\test\test1下执行某个py程序,程序里面使用了相对路径a.txt
那么对应的绝对路径:e:\test\test1\a.txt
>>> os.path.exists(r"C:\Users\dell\Desktop\a.txt")#路径写单斜线的话前面加r
True
>>> os.path.exists("C:\\Users\\dell\\Desktop\\a.txt")#或者都这双斜杠
True
>>>
>>> if os.path.exists("C:\\Users\\dell\\Desktop\\a.txt"):
...     print("文件存在!")
...
文件存在!
>>>
>>> os.path.exists(r"a.txt")
False
>>>
>>> fp = open(r"C:\Users\dell\Desktop\a.txt","r",encoding="utf-8")#打开文件
>>> fp
<_io.TextIOWrapper name='C:\\Users\\dell\\Desktop\\a.txt' mode='r' encoding='utf-8'>
>>> dir(fp)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'writelines']
>>>
>>> fp.read()#read读取文件的全部内容
'\ufeff光荣之路测试开发培训\n还是不错的\n感谢大家支持\nabc\ngloryroadtrain\n'
>>>
>>> fp.read()
''
>>> fp.seek(0,0)#把文件的游标指导最开始
0
>>> fp.read()
'\ufeff光荣之路测试开发培训\n还是不错的\n感谢大家支持\nabc\ngloryroadtrain\n'
>>>
>>> content =fp.read()#文件是一个字符串
>>> type(content)
<class 'str'>
>>>
>>> fp.close()#关闭文件
>>>
程序中不close会有什么影响:
1 python程序在执行完毕了,会自动close.
2 对于服务器端,不close,可能造成数据不真
正写入到文件里
3 对于服务器端,每次打开一个文件都不close
会把文件句柄(node)占用光.操作系统上打开文件是
有限制:65535个。达到65535个node被占用的时候
操作系统就死掉了,句柄耗尽。
结论:读写文件一定要close
问题:服务器端的程序是一直在执行?还是一会儿执行
一会儿不执行?
一直执行的回复1
一会儿执行一会儿不执行:2
服务器端的服务宗旨:尽管你可能不来,但是我们
一定死等。
句柄:指向磁盘文件在内存或者磁盘上的位置指针
>>> fp = open(r"C:\Users\dell\Desktop\a.txt","r",encoding="utf-8")
>>> fp.readline()#readline一行一行的读
'\ufeff光荣之路测试开发培训\n'
>>> fp.readline()
'还是不错的\n'
>>> fp.readline()
'感谢大家支持\n'
>>> fp.readline()
'abc\n'
>>> fp.readline()
'gloryroadtrain\n'
>>> fp.readline()
''
>>>
数据量不大:read()把数据读到内存里
优点:操作起来很快,速度快
缺点:占内存
 数据量大:readline()
优点:生内存
缺点:速度慢
>>> fp.seek(0,0)
0
>>> fp.readline()
'\ufeff光荣之路测试开发培训\n'
>>>
>>> fp.tell()#tell告诉你当前读取的位置
35
>>> fp.read(1)
'还'
>>> fp.tell()
38
>>> fp.readlines()
['是不错的\n', '感谢大家支持\n', 'abc\n', 'gloryroadtrain\n']
>>> fp.seek(0,0)
0
>>> lines = fp.readlines()#
>>> lines[1]
'还是不错的\n'
>>> lines[2]
'感谢大家支持\n'
>>> lines[3]
'abc\n'
练习:读取文件的行数
方法1
>>> len(lines)
5
方法2
with open('e:\\a.txt','r',encoding='utf-8') as fp:
 #print(len(fp.readlines()))
 for i in fp:
  sum_1+=1
print(sum_1)
遍历文件内容
>>> fp.seek(0,0)
0
>>> for line in fp:
...     print(line,end=' ')
...
光荣之路测试开发培训
 还是不错的
 感谢大家支持
 abc
 gloryroadtrain
 >>>
>>> for line in fp:
...     count+=1
...
>>> print(count)
5
>>> count =0
>>> while fp.readline():
...     count+=1
...
>>> print(count)
5
写:
>>> fp = open(r"C:\Users\dell\Desktop\a.txt","w",encoding="utf-8")
>>> fp.write(str(43242))#清空写
5
>>> fp.flush()
>>>
w:会清空文件在写入
a:会把写入的内容,追加到文件的最后一行
r+:read and write#不清空内容,可以同时读取和写入,写在文件前面,写入的内容会覆盖对应的内容
w+:write and read#先清空所有内容,然后写入,然后才可以读取写入的内容
>>> fp = open(r"C:\Users\dell\Desktop\a.txt","r+",encoding="utf-8")
>>> fp.write("放学啦")
3
>>> 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
>>> fp.write(two_word+"gr"+last_two_word)
6
>>> fp.close()
>>>
w+:清空原有内容后,进行读写的模式
r+:保留原有内容后,进行读写的模式
a+:保留原有内容后,进行读写的模式
   且写入内容永远在文件的最后一行
open函数,如果没有写模式,
默认是r模式,也就是读模式
没有写编码,那么就是gbk