zoukankan      html  css  js  c++  java
  • python-文件处理

    #文件的读写:

    ## r:只读

    f = open('File.txt','r')  # r:只读
    data = f.read()
    print(data)
    f.close()       #及时关闭,释放内存

      open函数默认即为只读模式,故其中的 ' r ' 可不写。文件访问结束后要及时close()。

    ## w:覆盖文件原始数据后写入新数据

    f = open('File.txt','w')           #'w':覆盖原数据来写入。
    f.write('hahaha
    ')
    f.write('ha
    123
    345
    ')
    f.writelines(['asd
    ','123','1'])  #只能是字符串
    f.close()

      在‘w’条件下,若open函数指定的文件不存在,则会新建一个该文件来写入数据。

    ## a:不覆盖原始数据,只在原始数据后追加新数据(不可读)

    f = open('File.txt','a')

      其它操作方法同 ' w '。

    # 使用with as 语句可避免使用f.close()

    with open('new.txt', 'w') as f:    #等效于f = open('new.txt', 'w')
        f.write('hahaha
    ')
    with open('new.txt') as f:
        print(f.read())

     #文件在b模式下的读写:

      b模式即以字节的方式来读写文件,b模式下的open函数无法指定其编码方式。在b模式下,就要常常对字符串和字节进行编码(encode)或解码(decode)转换:

    字符串------encode-----> bytes

    bytes -------decode-----> 字符串

     ## rb:以字节方式读文件

      新建File.txt文件,其内容为:

        123

        你好啊

    f = open('File.txt','rb')   #不能指定编码方式,即不能添加encoding:'xxx'
    print(f.read())
    print(f.read().decode('gbk'))

      上面第一个print是直接输出 f 的内容,故其输出结果为字节方式的文件内容,结果如下:

    b'123
    xc4xe3xbaxc3xb0xa1'   #
    即回车,在linux中是
    

      如果想要输出其原本的数据形式,则需要解码(decode)来实现,即第二个print。此处我们用了 ‘gbk’ 编码来解码,其结果如下:

    123
    你好啊

    ## wb:以字节方式写文件

    f = open('test.py','wb')

      在以字节方式写入文件内容时,要注意写入的数据必须是字节格式,字符串是不能写入二进制文件的。所以当写入字符串时:

    f.write('123
    ')

      程序会立刻报错:

    TypeError: a bytes-like object is required, not 'str'

      正确写入文件主要有如下两种方式:

    f.write(bytes('你好
    ', encoding = 'utf-8'))  #bytes()可将字符串按照指定编码(此处为'utf-8')转换成字节形式
    f.write('1111
    '.encode())         #此处使用的是encode来将字符串编码成pytes

    #其它文件操作方法:

    f.flush()     #刷新,以在写了一堆数据后保存文件,类似于系统快捷键Ctrl+S
    f.seek(3)    #将文件里的光标位置从开头移动3个字节
    f.seek(-3,2)  #此处2代表从文件末尾移动光标,-3说明向前移动三个字节。(注意:在2模式下,第一个参数一定要加上-号)
    
    #循环文件的推荐方式:
    f = open('a.txt','r')
    for i in f:   
        print(i)
    '''
    这种方式循环时,是从文件中每次拿一行数据,若使用:
    for i in f.readlines():
        print(i)
    则程序会先生成一个包含了文件全部数据的列表,然后在列表中每次拿一行。因此在有些情况下会占用较大内存,产生浪费。
    '''
  • 相关阅读:
    Python中的赋值与深浅拷贝
    Python面试题解析之前端、框架和其他
    Python面试题解析之数据库与缓存
    Python面试题解析之网络编程与并发
    Python面试题解析之Python基础篇
    2、使用rpm包安装grafana
    1、在Centos上安装Grafana
    MySQL所学所思所想
    运维感悟(信息大爆炸的时代,该学习什么来保持着我们的竞争力)
    C#.NET 中的 Timer 计时器及 3 种使用方法
  • 原文地址:https://www.cnblogs.com/yu-long/p/9986690.html
Copyright © 2011-2022 走看看