zoukankan      html  css  js  c++  java
  • python-文件读写资料整理

     

    # Date:2018/12/17
    ###################################################
    # 1、打开文件
    # 2、操作文件
    # 3、关闭文件
    # open('文件名','模式','编码')
    # 默认情况下,是只读模式 r
    # f = open('ha.log') # 打开ha.log文件 返回一个对象,以后要做操作的时候就操作这个对象
    # data = f.read() # 读取这个文件
    # f.close()
    # print(data)
    # my name is ha.log
    ########################
    # 模式
    # 1、 r,只读模式【默认】
    # 2、 w,只写模式【不可读;不存在则创建;存在则清空内容;】
    # 3、 x,只写模式【不可读;不存在则创建;存在则报错;】
    # 4、 a,追加模式【不可读;不存在则创建;存在则只追加内容;】
    ##########################
    #### ( r )只读模式【不指定模式时为默认模式】 ####

    1、文件不存在则报错FileNotFoundError: [Errno 2] No such file or directory: 'bb'
    1、打开文件后,指针位置为0,
    2、读取文件时,从指针当前位置向后读取。(可用seek)
    # f = open("ha.log",'r')
    # f.write("aaaa")
    # f.close()
    # # io.UnsupportedOperation: not writable 报错,不能写
    ##########################
    #### ( w ) 只写模式【不可读;文件不存在则创建;存在则清空内容;】 ####
    1、文件不存在则创建文件
    2、打开文件时,如果文件存在则文件所有内容先被清空,所以指针位置默认为0。
    3、写入文件时,根据指针当前的位置向后覆盖去写
    # f = open("ha1.log","w")
    # f.close()
    方式一:
      :在文件没有关闭之前,都可以写入进去,默认写入是按照顺序进行写的。
       在文件写入时,是按照指针位置向后覆盖去写。
    f = open('bb', 'w', encoding='utf-8')
    print(f.tell()) # 0
    print(f.write('12345678910')) # 11
    print(f.tell()) # 11
    print(f.seek(2)) # 2
    print(f.write('abc')) # 3
    print(f.tell()) # 5
    # print(f.write('22222dddd')) #
    print(f.tell()) # 5
    f.close()
    f.write('aaaaa')
      # ValueError: I/O operation on closed file. value错误:关闭文件的I/O操作。
      # 意思是文件已经关闭了,你就没有办法在写了。
    方式二:
      方式二中同样的方式,不会报错。
    with open('aa', 'w', encoding='utf-8') as f1:
    print(f1.tell())
    print(f1.write('abcddddddd' + ' ')) #
    print(f1.write('11111dddd' + ' ')) #
    print(f1.write('22222dddd')) #
    print(f1.tell())
    print(f1.write('afafafaf')) #
    ##########################.
    #### ( x )只写模式【不可读;文件不存在则创建;文件存在则报错;】 ####
    1、文件不存在创建文件,文件存在则报错

    2、功能和w功能类似,一般很少使用
    # # f = open("ha1.log",'x')
    # # FileExistsError: [Errno 17] File exists: 'ha1.log' 报错文件已存在
    # f1 = open('ha3.log','x') # 文件不存在则创建,创建完成后可以直接写入内容。
    # f1.write("112233")
    # f1.close()
    ##########################
    #### ( a )追加模式【不可读;不存在则创建;存在则只追加内容;】 ####
    1、打开文件后,默认指针位置到最后,如果直接读,会读取不到内容,必须 seek(0)
    2、如果文件存在则在后面追加内容,如果不存在则创建文件
    3、即使调整了(seek)指针位置,也是在最后追加
    # f = open("ha2.log",'a') # 文件中有666
    # f.write("77777") # 写入文件777后,文件内容为:666777
    # f.close()
    ###########################################################

    # 以二进制(字节)方式打开

    # 普通打开
    # ==== python 内部将010101 =》 转换成字符串, 通过字符串操作
    # 010101011 python解释器 程序员

    ############################################
    # ##### 字节方式打开 #####

    # # 1、rb,只读
    # # ha.log 内容:中国
    # f = open("ha.log",'rb')
    # data = f.read()
    # f.close()
    # print(data,type(data))
    # # b'xe4xb8xadxe5x9bxbd' <class 'bytes'>
    # str_data = str(data,encoding='utf-8')
    # print(str_data)
    # # 中国
    ############################################

    # # 2、wb,只写
    # f = open('ha.log','wb')
    # str_date = "中国人"
    # bytes_data = bytes(str_date,encoding='utf-8')
    # f.write(bytes_data)
    # f.close()

    # 为了方便,一般都使用字符串类型,让python解释器帮助我们进行二进制的转换

    ###########################################################

    # # 写:写的时候,会先把指针调整到最后,然后去写。
    # # 读:在关闭文件之前,指针位置会接着往后读,调整指针。
    # # f.tell() # 获取当前的指针在哪里
    # # f.seek(0) # 设置指针的位置
    ############################################################

    #### 1、r+ 读写 ###
    1、文件不存在则报错;FileNotFoundError: [Errno 2] No such file or directory: 'bb'
    2、打开文件后指针位置默认为0
    3、文件写的时候,会根据指针当前的位置向后覆盖去写,写完后指针停留在最后写的字符位置。
    4、读的时候会根据当前指针位置往后读取。
    with open('aa', 'r+', encoding='utf-8') as f1:
    print(f1.tell()) # 0
    print(f1.write('123456789')) # 9 这个9是指写入的个数
    print(f1.tell()) # 9
    print(f1.write('1234567')) # 7
    print(f1.seek(3)) # 3
    print(f1.write('abcdefg')) # 7
    print(f1.read())
    # 123abcdefg012345678910
    print(f1.tell()) # 10
    print(f1.seek(0)) # 0
    print(f1.write('中国人')) # 3
    print(f1.tell()) # 9
    print(f1.read())
    # 中国人g234567898910 # 由此看出,一个中文占据3个字符
    # # 读写,
    # f = open('ha.txt','r+',encoding='utf-8')
    # print(f.tell()) # 0
    # data = f.read()
    # print(f.tell()) # 18
    # print(type(data),data)
    # # <class 'str'> 中国人日本人泰国人
    # f.write("印度人") # 写入ha.txt文件一个印度人。
    # print(f.tell()) # 27 因为写的时候会将指针调整到最后,然后去写。
    # f.seek(0) # 将指针调整为 0
    # data = f.read()
    # print(type(data),data)
    # # <class 'str'> 中国人日本人泰国人印度人
    # print(f.tell()) # 36
    # f.close() # 关闭文件

    #####################################################
    #### 2、w+ 可写读 ####
    1、文件不存在则创建
    2、文件存在,文件打开的时候,先清空文件内容,指针位置为0
    注:非常危险
    3、写入文件时,指针位置移动至写的最后一个字符处,此时读取只能读取指针往后的内容。
    4、读取文件时,会根据当前指针所在位置向后读取。

      以下两个语句已经将文件aa的内容清空了。
     
     f1 = open('aa', 'w+', enconding='utf-8')
      print(f1.tell()) # 0
      with open('aa', 'w+', enconding='utf-8') as f1:
      print(f1.tell()) #0

    with open('aa', 'w+', encoding='utf-8') as f1:
    print(f1.tell()) # 0
    print(f1.write('123456789')) # 9 这个9是指写入的个数
    print(f1.tell()) # 指针位置 9
    print(f1.write('1234567')) # 7
    print(f1.tell()) # 指针位置 16
    print(f1.seek(3)) # 将指针位置调整为3
    print(f1.write('abcdefg')) # 写入abcdefg
    print(f1.tell()) # 当前指针位置为 10
    print(f1.read()) # 读取内容从当前指针位置开始向后读取。
    # 234567
    print(f1.seek(0)) # 将指针位置移动至0
    print(f1.read())
    # 123abcdefg234567

    ######################################################
    #### 3、x+ 写读 ####
    x+ 和w+基本上一样。额外功能如果文件存在,报错。
    ######################################################
    #### 4、a+ 写读 ####
    1、文件不存在创建文件
    2、打开的同时,指针已经到最后了。如果文件中有内容就会在文件最后进行追加
    3、写时,也会追加,将指针放到最后。即使调整了指针位置也会在文件最后进行追加。
    4、如果文件本身有内容时,直接打开文件进行读取,是读不到的,以为指针移动到了内容最后,读是从指针位置开始的。需要seek(0)
    # aa  文件初始内容为 sidaofeng
    with open('aa', 'a+', encoding='utf-8') as f1:
    print(f1.read()) # 没有内容,因为指针已经移动到了文件最后
    f1.seek(0) # 将指针移动至0
    print(f1.read()) # sidaofeng
    print(f1.tell()) # 9
    print(f1.write('123456789')) # 9 这个9是指写入的个数
    print(f1.tell()) # 指针位置 18
    print(f1.write('abc')) # 3
    print(f1.tell()) # 指针位置 21
    print(f1.seek(3)) # 将指针位置调整为3
    print(f1.write('0.0.0.0'))
    # 将0.0.0.0 写入文件,虽然指针位置为3,但是只要一执行写命令,文件指针就会先移动至内容最后,然后进行内容的写入。
    print(f1.tell()) # 当前指针位置为 28
    f1.seek(0)
    print(f1.read()) # sidaofeng123456789abc0.0.0.0

    ##############################################################
    # r+
    # 从开始向后读
    # 写,追加,指针调到最后
    # w+
    # 先清空所有内容
    # 从开始向后读,啥都没有
    # 写的时候是重新写,指针到最后

    ################################################################
    def close(self, *args, **kwargs): # real signature unknown
            关闭文件
            pass
    
        def fileno(self, *args, **kwargs): # real signature unknown
            文件描述符  
            pass
    
        def flush(self, *args, **kwargs): # real signature unknown
            刷新文件内部缓冲区,强行刷入硬盘
            pass
    
        def isatty(self, *args, **kwargs): # real signature unknown
            判断文件是否是同意tty设备
            pass
    
        def read(self, *args, **kwargs): # real signature unknown
            默认是全读,可以指定读取字节(字符)数量,
         读取字节/字符取决于读取类型,b pass def readable(self, *args, **kwargs): # real signature unknown 是否可读 pass def readline(self, *args, **kwargs): # real signature unknown 仅读取一行数据,指针会变一行 pass      redlines: 不推荐用,因为将文件的所有行都一次添加到内存里了。
            【“第一行“,”第二行”】 def seek(self, *args, **kwargs): # real signature unknown 指定文件中指针位置 pass def seekable(self, *args, **kwargs): # real signature unknown 指针是否可操作 pass def tell(self, *args, **kwargs): # real signature unknown 获取指针位置,没有参数,直接获取指针位置 pass def truncate(self, *args, **kwargs): # real signature unknown 截断数据,仅保留指定之前数据
         依赖指针的位置 pass def writable(self, *args, **kwargs): # real signature unknown 是否可写 pass def write(self, *args, **kwargs): # real signature unknown 写内容
         str:无b,字符,需要添加 encoding=
         brys:有b,字节, pass def __getstate__(self, *args, **kwargs): # real signature unknown pass def __init__(self, *args, **kwargs): # real signature unknown pass @staticmethod # known case of __new__ def __new__(*args, **kwargs): # real signature unknown """ Create and return a new object. See help(type) for accurate signature. """ pass def __next__(self, *args, **kwargs): # real signature unknown """ Implement next(self). """ pass def __repr__(self, *args, **kwargs): # real signature unknown """ Return repr(self). """ pass

    with

    2.7以后可以同时打开两个文件

    
    
    我的目标是每天厉害一点点
  • 相关阅读:
    python数字
    python字符串方法
    python操作符与流程控制
    网络基础和python(二)
    网络基础和python
    Ubuntu源更新
    make和makefile介绍
    JavaScript
    redis mac安装配置
    网络编程之socket(TCP,UDP)
  • 原文地址:https://www.cnblogs.com/sidaofeng/p/10102897.html
Copyright © 2011-2022 走看看