Python学习-读写文件

作者: 残阳夕露 | 来源:发表于2018-07-09 17:56 被阅读127次
    查看所有Python相关学习笔记

    本篇内容用于记录学习过程中接触到的读写文件相关操作

    File(文件) 方法

    阅读参考2:操作文件和目录(os)

    交互学习:Python学习-文件系统

    输入和输出

    每次打开文件要记得关闭

    • 原始方法
    >>>f = open('/path/to/file', 'r')
    >>>print(f.read())
    >>>f.close()
    
    • try...finally方法
    >>>try:
    >>>    f = open('/path/to/file', 'r')
    >>>    print(f.read())
    >>>finally:
    >>>    if f:
    >>>        f.close()
    
    • with方法(自动调用close方法,支持打开多个文件,不用单独考虑close的问题)
    >>>with open('/path/to/file', 'r') as f:
    >>>    print(f.read())
    
    >>>with open('abc.txt') as a, open('bcd.txt','w') as b:
    >>>    f1 = a.read()
    >>>    f2 = b.write('hhh')
    

    打开读文件

    f=open('C:/Users/Administrator/Desktop/tmp/foo.txt','r')
    f=open('C:/Users/Administrator/Desktop/tmp/foo.txt')
    
    • 直接获取 打开文件后可以直接通过for循环读取内容,每循环一次读一行
    with open(r'E:\tmp\hello.txt') as f:
        for one in f:
            print(one)
    # 执行结果
    1111
    
    2222
    
    333
    
    • read() 从读取所有内容(读取后,指针位置移动到最后)
    with open(r'E:\Python\tmp\own\hello.txt','r+') as f:
        print(f'指针位置:{f.tell()}')
        print(f.read()) #读取内容
        print(f'指针位置:{f.tell()}')
    # 执行结果:
    指针位置:0
    111
    222
    333
    指针位置:13
    
    • readline() 一行一行读取(每次读取后,指针位置移动到下一行)
    with open(r'E:\Python\tmp\own\hello.txt','r+') as f:
        print(f'指针位置:{f.tell()}')
        print(f.readline()) #一行一行读取
        print(f'指针位置:{f.tell()}')
        print(f.readline())  # 一行一行读取
        print(f'指针位置:{f.tell()}')
        print(f.readline())  # 一行一行读取
        print(f'指针位置:{f.tell()}')
    # 执行结果
    指针位置:0
    111
    
    指针位置:5
    222
    
    指针位置:10
    333
    指针位置:13
    
    • readlines() 读取所有行并存入一个列表中(每次读取后,指针位置移动到最后)
    with open(r'E:\Python\tmp\own\hello.txt','r+') as f:
        print(f'指针位置:{f.tell()}')
        print(f.readlines()) #读取所有行并存入一个列表中
        print(f'指针位置:{f.tell()}')
    # 执行结果:
    指针位置:0
    ['111\n', '222\n', '333']
    指针位置:13
    

    打开写文件

    覆盖原来的内容或新建文档

    f=open('C:/Users/Administrator/Desktop/tmp/foo.txt','w')
    

    打开写文件

    接着原来的内容写或新建文档

    f=open('C:/Users/Administrator/Desktop/tmp/foo.txt','a')
    
    写示例
    #打开文件,注意转译符,可在路径前加r
    f=open(r'C:/Users/Administrator/Desktop/tmp/foo.txt','r+')
    #写入内容
    f.write('''hasen1.............
    hasen2..............
    hasen3...............   
    hasen4***********
    ''')
    str = f.read()
    print(str)
    #关闭文件
    f.close()
    

    打开二进制文件

    要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可

    >>> f = open('/Users/michael/test.jpg', 'rb')
    >>> f.read()
    b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
    

    写入二进制文件(用'wb')

    未调用close()时由于缓存机制,写的内容不会立即写入到文件,此时可以使用flush()方法,将内容强制写入文件。
    f = open('abc.txt','w') #打开文件
    f.write('abcdefg') #写入内容
    f.flush() #强制写入文件
    

    示例

    # 将一个文件中的内容复制到另一个文件
    f=open('C:/Users/Administrator/Desktop/tmp/foo.txt')
    copy = f.read()
    f.close()
    print()
    print(copy)
    f2 = open('C:/Users/Administrator/Desktop/tmp/copy.txt','a')
    f2.write('\n'+copy)
    f2.close()
    f3 = open('C:/Users/Administrator/Desktop/tmp/copy.txt')
    copy2 = f3.read()
    f3.close()
    print('..................')
    print(copy2)
    
    tell 当前指针位置
    >>>fh = open('abc.txt')
    >>>fh.tell()
    0
    
    seek 移动指针

    seek() 方法用于移动文件读取指针到指定位置。

    • 语法fileObject.seek(offset[, whence])
      • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
      • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
    >>>fh = open('abc.txt')
    >>>fh.tell()
    0
    >>>fh.seek(0) # 从0开始移动0位-->相当于返回到开始位置
    >>>fh.tell()
    0
    >>>fh.seek(2) #从开始位置向后移动两个位置
    >>>fh.tell()
    2
    >>>fh.seek(2,0) #0-从开始位置向后移动两个位置
    >>>fh.tell()
    2
    >>>fh.seek(2,1) #1-从当前位置向后移动两个位置
    >>>fh.tell()
    4
    >>>fh.seek(-2,2) #2-从结束位置向前移动两位
    >>>fh.tell()
    
    

    永久存储:

    • pickle模块
      • 存放:pickling
      • 读取:unpickling

    以往存入文件中的都是str格式,读出来后也是str格式
    pickle以二进制格式存入,读取出来后还是原文件的格式(字典/列表等)

    • pickle.dump(a,b)将a存入b
    • pickle.load(b)从b中读取
    import pickle
    my_list = [1,2,3,4]
    pickle_file = open('my_list.pkl','wb') # 以二进制写的方式打开文件
    pickle.dump(my_list,pickle_file) # 将列表存入文件
    pickle_file.close() # 关闭文件
    
    pickle_file = open('my_list.pkl','rb')  # 以二进制读的方式打开文件
    my_list2 = pickle.load(pickle_file) # 以列表形式读取文件
    pickle_file.close()
    print(my_list2)
    
    # 执行结果
    [1, 2, 3, 4]
    

    文件的打开模式和文件对象方法

    文件打开模式

    打开模式 执行操作
    'r' 以只读方式打开文件(默认)
    'w' 以写入的方式打开文件,会覆盖已存在的文件
    'x' 如果文件已经存在,使用此模式打开将引发异常
    'a' 以写入模式打开,如果文件存在,则在末尾追加写入
    'b' 以二进制模式打开文件
    't' 以文本模式打开(默认)
    '+' 可读写模式(可添加到其他模式中使用)
    'U' 通用换行符支持

    文件对象方法

    打开模式 执行操作
    文件对象方法 执行操作
    f.close() 关闭文件
    f.read([size=-1]) 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
    f.readline([size=-1]) 从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符
    f.readlines() 读取所有行,将所有行以列表形式存储
    f.write(str) 将字符串str写入文件
    f.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
    f.seek(offset, from) 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
    f.tell() 返回当前在文件中的位置
    f.truncate([size=file.tell()]) 截取文件到size个字节,默认是截取到文件指针当前位置

    相关文章

      网友评论

        本文标题:Python学习-读写文件

        本文链接:https://www.haomeiwen.com/subject/ksvtpftx.html