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

    #写和读取时候,所有的数据只能是字符串,不能是数字或者其他内容
    
    #新建一个文件;冰倩写入文件内容为:这是一个新的文件内容
    f = open('a.txt',"w",encoding="utf8")
    f.write("这是一个新的文件内容
    ")   #写入操作 
    回车换行
    f.write("这是一个新的文件内容
    ")   #写入操作
    f.writelines(['111
    ','222
    '])   #列表方式写入多行
    print(f.writable())  # 判断是否可写
    f.close()
    
    
    
    #打开文件,读取文件内容,不写'r',默认是只读模式
    r = open("a.txt",'r',encoding="utf8")
    data = r.read()  #读取全部内容
    print(data)
    print(r.readable())  #判断文件是否只读
    print(r.readline())  #一次读一行内容,下一行内容可以在接着运行readline,默认最后一行内容有个回车,会有换行的情况
    print(r.readline(),end="") #去掉最后的回车
    print(r.readlines()) #读取所有的内容,把每行的内容放到一个列表中,默认最后一行有空格
    r.close()
    
    
    #追加
    f = open('a.txt',"a",encoding="utf8")
    f.write("这是追加的内容
    ")
    f.close()
    
    #r+ 既能读又能写
    # f = open('a.txt',"r+",encoding="utf8")
    # f.write("这是r+的内容
    ")  #默认第一行开始写入,把存在的内容直接按顺序覆盖修改
    # f.close()
    
    
    
    #打开不用关闭文件 用with就可以,自动会关闭文件
    with open('a.txt','r',encoding="utf8") as f:
        data = f.read()
        print(data)
    
    
    # str ---- > encoding(编码) ----->bytes
    # btyes ---> encode(解码) ------->str
    
    #open模式
    '''
    不填写默认     'r'       open for reading (default)
             'w'       open for writing, truncating the file first
             'x'       create a new file and open it for writing
             'a'       open for writing, appending to the end of the file if it exists
             'b'       binary mode
    不填写默认     't'       text mode (default)
             '+'       open a disk file for updating (reading and writing)
             'U'       universal newline mode (deprecated)
    
    '''
    
    #b模式就是二进制的方式:
    #
    f = open('二进制文件','wb')  # wb 二进制方式写入文件,二进制文件没有编码,只有解码
    #f.write('1111,你好')         #报错 TypeError: a bytes-like object is required, not 'str' 二进制文件写入,需要以二进制的方式,不能直接把str写到里面
    #处理方式:  可以先把字符串转换成二进制的方式在写入
    #字符串转二进制过程(编码):
    test = bytes('1111,你好',encoding="utf-8")   #bytes 和 '1111,你好'.encode="utf-8  编码都是一样的;一个是bytes方法  一个是字符串自己提供的一个方法
    f.write(test)
    
    
    
    #
    f = open('二进制文件','rb')   #二进制的方式读取文件
    data = f.read()
    print(data)                  #b'1111,xe4xbdxa0xe5xa5xbd'读取的是二进制的文件,所以需要解码成字符串.
    #二进制转字符串过程(解码):
    print(data.decode('utf-8'))  #解码后:1111,你好
    
    
    
    
    '''一: read(3):文件打开方式为文本模式时,代表读取3个字符;文件打开方式为b模式时,代表读取3个字节
                    其余的文件内光标移动都是以字节为单位如seek,tell,truncate
    注意:
      1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
      2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
    '''
    
    
    f = open('二进制文件','r+',encoding="utf-8")
    '''
    二进制文件内容如下:
    你好
    '''
    
    f.readline()
    print(f.tell())   #tell光标当前所在位置等于8  为什么是8 因为"你好" 一个中文为3个字节加上win平台的默认回车为"
    " 所以为8
    f.seek(1)         #seek光标跳到第1个字节位置
    print(f.tell())
    f.truncate(3)    #从开始算,将文件安只保留从0-3个字节的内容
    #seek 高级模式
    f.seek(10,0)  #0是默认;不写就是默认0;从文件开始数10个位置
    f.seek(10,1)  #1相对位置,就是上一次位置,在数10个位置,这个需要b模式打开文件,不然报错
    f.seek(-10,2)  #2倒序,就是倒着读取,在数-10个位置,这个需要b模式打开文件,不然报错
    
    f.close()
    
    #显示win平台的默认回车;newline以最原始的方式显示换行符
    f = open('二进制文件','r+',encoding="utf-8",newline='')
    data = f.readlines()
    print(data)       #['你好
    ', '1111']   #newline效果就显示
    ;  不加newline默认情况下是['你好
    ', '1111']少一个
    是因为python给你优化掉了
  • 相关阅读:
    <a>與<link>的區別
    103_linux如何安装mysql数据库?
    102_Centos7在虚拟机上开机时出现黑屏,怎么解决?
    101_war和war exploded的区别
    100_linux中passwd文件的用户解析
    099_linux基础命令三
    098_linux基本操作命令二
    097_linux如何配置jdk路径
    096_如何将linux的IP地址转换成静态ip地址?
    078_ip地址.DNS,子网掩码,网关分别是什么,又有什么作用?
  • 原文地址:https://www.cnblogs.com/ajaxa/p/8966874.html
Copyright © 2011-2022 走看看