文件处理

文件处理流程:

  (1)打开文件,得到文件句柄并赋值给一个变量

  (2)通过句柄对文件进行操作

  (3)关闭文件

1. 文件读取操作(默认模式,文件必须存在,不存在则抛出异常)  r      f = open ('jiao ','r',encoding = 'utf8')   

                                  注:此处当文件再统同一路径下,可以直接写文件名,否则应写文件的绝对路径

  (1)f.read ()  读取文件全部内容,括号内传入参数 x 则表示读取 x 个字符

f = open('jiao','r',encoding = 'utf-8')    打开一个文件,编码方式为‘utf-8’ (存在硬盘上的文件默认为 utf-8编码方式,windows系统读取文件为gbk编码,而open函数会检索系统编码方式并应用
data=f.read()
print(data)
f.close())

  (2)f.readline()从光标处开始读取文件一行的内容 如果在此之前文件执行过 f.read() 即全部读取过,则再执行此语句运行结果为空

  (3)f.readlines()从光标处开始读取文件所有内容并放在一个列表中

  (4)f.readable()判断文件是否可读返回True 或者False

2.文件写操作(不可读,不存在则创建,存在则清空内容)   w     f = open('jiao', 'w',encoding = 'utf8')  

  (1)f.write()   从光标出开始写入内容,括号中必须以字符串的形式传入

  (2)f.writeable()   判断文件是否可写入,返回True 或者False

  (3)f.writelins()  从光标处开始写入内容,括号内以列表的形式传入,列表内必须全都是字符串,也可以是字符串

   注:如果打开的文件有内容在进行 f.write 操作,则新写入的内容会覆盖源文件第一行的内容,因为文件打开贯标停在开始的位置,而写入是从光标出开始的

     若要避免这种情况,可以先以读的方式打开这个文件,读取内容,再用写的方式打开这个文件进行操作

src_f = open('jiao','r',encoding = 'utf8')
data = src_f.readlines()
src_f.close()


dst_f = open('jiao','w',encoding='utf8')
dst_f.writelines(data[0])
dst_f.close()

    上述代码实则模拟了系统中对文件进行修改(修改操作为删除文件‘jiao’除第一行外的全部内容)的操作,文件并不是真的被修改,二十被新的文件所覆盖

   (4)f.closed  判断文件是否关闭

  (5)f.flash()    刷新,将写到文件中的内容保存到硬盘中

3.追加操作(可读,不存在则创建,存在则只追加内容)  a    f = open('jiao' ,'a',encoding = 'utf8')    

‘+’表示可以同时读写某个文件

4. r+   读写 (可读、可写) f = open ('jiao','r+','utf8')    

  (1)f.tell()   返回当前光标位置,按字节计数(只有以read(read(3)代表读三个字符)进行读操作时,才是按字符进行计数,其余都是以字节为移动单位

  (2)f.seek()   控制光标的移动,默认不论执行几次,都是从文件开始位置算

f = open('jiao','r+',encoding = 'utf8')
print(f.tell())
print(f.seek(10))
print(f.tell())
print(f.seek(3))
print(f.tell())
运行结果:
0 10 10 3 3

     当使用seek(x,1)时,是从当前光标的位置开始移动,但此时应以b的模式打开文件

f = open('jiao','rb')
print(f.tell())
print(f.seek(10))
print(f.tell())
print(f.seek(3,1))
print(f.tell())
运行结果:
0
10
10
13
13

    当使用seek(x,2)时,是从最后一个光标位置开始移动(从后往前移动),此时x应给为负数

  (3)f.truncate()      截取 f.truncate(10)     截取十个字节的内容(可在w模式、a+模式,r+模式下应用,但是不能在w+模式下用,因为w+模式代开文件,

                               之前的内容会被清除,即无内容可截

5.w+   写读(可读、可写)

6.a+    写读(可读、可写)

7.with     with open('jiao','w') as f:     

   与open的区别是:open打开文件进行操作后必须以close结尾将文件关闭,而用with时不需要

          with可同时打开两个文件

with open('jiao','r',encoding = 'utf8')    此处斜杆是为了避免一行的代码过长因此换行写,不加斜杆会报错
    open('jiao_new','w',encoding = 'utf8'):

8.文件处理模式b模式   (b的方式不能指定编码,因为b模式就是在对原生编码(二进制)进行操作) b模式下传入、传出的都是字节

    (1)f = open('jiao','rb',)      读操作

f = open('jiao','rb')
data=f.read()
print(data)
print(data.decode('utf8'))        读出来的是字节形式,想要看到正常内容需要对其解码
f.close()

  (2)f = open('jiao','wb')    写操作   以‘wb’模式进行写处理,写入的是字节形式,

f = open('jiao','wb')
f.write(bytes('11111
',encoding = 'utf8'))   以‘wb’模式进行写处理,写入的是字节形式,字符串以字节形式写入,中间需要经过编码,转化为字节
f.write('guagua'.encode('utf8'))
f.close()

  (3)f = open('jiao','ab')   追加操作    

9.循环文件的方式   for i in f:

 

                         

f = open('jiao','wb')
f.write(bytes('11111 ',encoding = 'utf8'))
f.close()
原文地址:https://www.cnblogs.com/jgua/p/13510893.html