zoukankan      html  css  js  c++  java
  • python基础之文件操作

    本文主要讨论python中文件的操作。

    1.文件的基本操作:

    1 f=open('文本处理.txt',encoding='utf-8')
    2 data=f.read()
    3 print(data)
    4 f.close()

    对于一个文件,使用open函数打开该文件,使用close()函数关闭该文件。注意,open一个文件,必须要使用close关闭,否则该文件会一直占用内存

    2.指定模式打开文件(r,w,a)

    (1)r模式:只读模式

    1 f=open('文本处理.txt','r',encoding='utf-8') #如果不指定打开方式,默认以r模式打开
    2 data=f.read()
    3 print(data)
    4 f.close()

    r模式表示以只读模式打开文件,这样就可以读取文件内容,但是也只能读取文件的内容,不能修改文件内容。可以通过readable函数判断一个文件是否可读:

    1 f=open('文本处理.txt','r',encoding='utf-8') #如果不指定打开方式,默认以r模式打开
    2 print(f.readable()) #若文件可读,返回true,否则返回false
    3 f.close()

    在r模式下,有三种方式读取文件的内容:read(),readline(),readlines().

    a.read()函数,一次读取文件的全部内容,光标移动至文件末尾,即(1)中的代码形式

    b.readline()函数,一次读取文件的一行,可以使用for循环遍历分行读取文件内容:

    1 f=open('文本处理.txt','r',encoding='utf-8')
    2 for i in f:
    3     print(f.readline()) #因为windoow中文件的每一行是以
    结尾的,因此这样会导致每一行之间多出一行空行
    4 
    5 for i in f:
    6     print(f.readline(),end='')#在print语句中加入end可以去掉每一行之间的空行

    c.readlines()按行读取文件内容:

    1 f=open('文本处理.txt','r',encoding='utf-8')
    2 data=f.readlines() #按行读取文件所有内容,并将文件内容以列表的形式返回,列表的每一个元素就是文件的每一行的内容(包含
    字符)
    3 print(data)
    4 f.close()

     (2)w模式:只写模式(每一次都会覆盖掉文件的内容)

      w模式表示只写,即只能向文件中添加内容,不能读取文件中的内容。可以通过writables函数来查看一个文件是否是可写的

    1 f=open('wr.txt','w',encoding='utf-8')
    2 print(f.writable()) #若文件可写返回true,否则返回false

      向文件中写入数据有两种方式:write()和writelines()

    a.write():一次将所有内容写入文件中,可以通过 来换行:

    1 f=open('wr.txt','w',encoding='utf-8')
    2 print(f.writable()) #若文件可写返回true,否则返回false
    3 f.write('122323233333
    222222222
    44445455454')
    4 f.close()

    b.writelines()

    1 f=open('wr1.txt','w',encoding='utf-8')
    2 print(f.writelines(['123
    ','455
    ','dgue'])) #序列中的元素必须是字符串,只能写入字符串。print的输出结果是None,
    3 #                                             #如果是write()函数,print的输出结果是写入文件的内容
    4 f.close()

    (3)a模式:追加模式

      a模式也是向文件中写入数据,不过不同于w模式,w模式是每一次写入新的内容都会覆盖掉文件的内容,而a模式是在文件结尾添加内容,不会覆盖掉文件之前的内容。

    1 f=open('wr1.txt','a',encoding='utf-8')
    2 f.write('写道最后一行')
    3 f.writelines(['hheh','344343'])
    4 f.close()

      a模式下向文件中写入数据的方法与w模式一致。

    3.文件编码

    1 f=open('wr1.txt','r+',encoding='gbk') #w1.txt是以utf-8写入的,因此必须要以utf-8的编码读,否则会出现乱码
    2 data=f.read()
    3 print(data)

    需要注意,读取文件一定要保持编码方式一致,用什么编码写入的文件,就一定要以什么编码读取文件,否则会出现乱码。可以通过encoding函数来查看文件的编码:

    1 f=open('wr.txt','r+')
    2 print(f.encoding)
    3 f.close()

    4.r+,w+,a+

    r,w,a都只是单一的只读只写操作,如果想要既能读又能写,那就需要用到r+,w+,a+三种操作了,r+表示既可以读文件,也可以写入文件,写入文件是在文件末尾添加,这种模式不会覆盖掉文件之前的内容。但是需要注意,这种模式下,如果文件不存在,是不会新创建一个文件的,而a+模式则会新建一个文件。w+,a+都是既可以向文件中写入数据,也可以读取文件的数据,两者区别是,在w+模式下,一旦运行程序,就会自动清空文件之前的所有内容,而a+则不会

    1 f=open('wr1.txt','w+',encoding='utf-8')  #w+模式下,一运行程序,就会自动把文件内容清空
    2 data=f.read()  #读取不到数据,因为w+已经把文件数据清空
    3 print(data)
    4 f.close()

    5.with关键字

      若直接使用open函数,那么在每一次使用open函数时候都必须要使用close函数来关闭文件,如果不想这样做,可以使用with关键字:

    1 with open('wr1.txt','r',encoding='utf-8') as f:
    2     data=f.read()
    3     print(data)

    6.使用with关键字把一个文件内容写入另一个文件中:

    1 with open('wr1.txt','a',encoding='utf-8') as f1,
    2         open('wr.txt','r',encoding='utf-8') as f2:  #f1以只写模式打开,f2以只读模式打开,这样就可以把f2的内容写入f1中
    3     data=f2.read()
    4     f1.write(data)
    5     print(data)

    7 rb,ab,wb二进制模式读取文件

    1 #f=open('wr.txt','rb',encoding='utf-8')  #错误,b模式不能指定encoding
    2 f=open('wr.txt','rb')
    3 data=f.read() 
    4 print(data)

    注意,二进制模式操作文件不能指定编码方式,因为文件编码就是为了把字符串编码为二进制,如果已经是用二进制进行操作文件,自然不需要再编码

    1 #f=open('wr.txt','rb',encoding='utf-8')  #错误,b模式不能指定encoding
    2 f=open('wr.txt','ab')
    3 #data=f.write('dederfrefr') #错误,在b模式下,必须以二进制的方式向文件写入数据,因此必须把字符串转为二进制
    4 f.write(bytes('hello',encoding='utf-8')) #可以使用bytes函数指定编码方式将字符串转为二进制
    5 f.write('nihaoya'.encode('utf-8'))       #也可以使用encode函数指定编码方式

    以二进制模式向文件写入数据时,需要将字符串转为二进制的方式,不能直接写入字符串

    8 wt和rt

      wt和rt是针对windows平台的文本格式处理,主要是处理换行符的,在wt模式下,Python写文件时会用 来表示换行,在rt模式下,python在读取文本时会自动把 转换成

    9文件处理的其他方法

    (1)closed 判断文件是否关闭,如果关闭,则返回true,否则返回false

    1 f=open('wr.txt','r+',encoding='utf-8' ,newline='')  #读取文件中真正的换行符
    2 data=f.readlines()
    3 print(data)
    4 print(f.closed)  #判读文件是否关闭,如果关闭则返回true,否则返回false
    5 f.close()
    6 print(f.closed)

    (2)flush()将内存中的数据刷到硬盘上

    1 f=open('wr.txt','a+',encoding='utf-8')
    2 f.write('heheh')
    3 f.flush()  #将内存中的数据刷到硬盘上
    4 f.close()

    (3)tell()返回光标当前的位置

    1 f=open('wr.txt','r+',encoding='utf-8')
    2 print(f.tell())  #返回光标当前的位置
    3 data=f.readline()
    4 print(f.tell())
    5 print(data)
    6 f.close()

    (4)seek()将光标移动指定的字节

    1 f=open('wr.txt','rb')
    2 print(f.tell())
    3 f.seek(3)           #将光标从当前位置向后移动三个字节
    4 print(f.tell())
    5 f.seek(3,1)         #将光标从当前位置向后移动三个字节
    6 print(f.tell())
    7 f.seek(-5,2)        #将光标从文件末尾向前移动五个字节
    8 print(f.tell())
    9 f.close()

      seek(n,flag=1)seek函数有两个参数,第一个参数是光标移动的字节数,第一个参数是缺省参数,表示是从前向后移动光标还是从文件结尾向前移动光标,其中1代表从前向后移动。2等于从结尾向前移动,注意,如果flag=2,则n要使用负数

    (5)truncate(n)保留文件前n个字节

    1 f=open('wr1.txt','ab+')
    2 f.truncate(10)          #从头开始算,只保留文件0-10个字节
    3 f.close()

    10利用seek函数查看大文件的最后一行(一般日志文件需要)

     1 f=open('wr.txt','rb')
     2 offs=-3
     3 while True:
     4     f.seek(offs,2)
     5     data=f.readlines()
     6     if len(data)>1:
     7         print('最后一行:',data[-1])
     8         break
     9     offs=offs*2
    10 f.close()
  • 相关阅读:
    Mac上的USB存储设备使用痕迹在新版操作系统有所变化
    Beware of the encrypted VM
    A barrier for Mobile Forensics
    Second Space could let suspect play two different roles easily
    Take advantage of Checkra1n to Jailbreak iDevice for App analysis
    Find out "Who" and "Where"
    Where is the clone one and how to extract it?
    Downgrade extraction on phones running Android 7/8/9
    高版本安卓手机的取证未来
    How to extract WeChat chat messages from a smartphone running Android 7.x or above
  • 原文地址:https://www.cnblogs.com/jiachuantang/p/8387689.html
Copyright © 2011-2022 走看看