• 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()
  • 相关阅读:
    解决中文环境下zabbix监控图形注释乱码
    SSIS CDC(Change Data Capture)组件在数据库中启用报错。 The error returned was 14234: 'The specified '@server' is invalid
    Tableau 群集部署
    访问Tableau自带的PostgreSQL数据库
    [译]Stairway to Integration Services Level 18 – 部署和执行
    [译]Stairway to Integration Services Level 16 – Flexible Source Locations (多文件导入)
    [译]Stairway to Integration Services Level 15 – SSIS 参数回顾
    [译]Stairway to Integration Services Level 14
    [译]Stairway to Integration Services Level 13
    [译]Stairway to Integration Services Level 12
  • 原文地址:https://www.cnblogs.com/jiachuantang/p/8387689.html
Copyright © 2020-2023  润新知