• 文件操作


    一. 文件读取

    f = open("123456", mode = "r", encoding = "utf-8")

    "123456": 文件路径

    1. 绝对路径 c:/abc/123.txt       https://www.xxxxx.com/qwe.jpg

    2.相对路径 ../../abc/def                     (用的更多, 因为把文件放在文件夹一起发送时, 在另一个电脑运行时, 不会出错)

    mode: r w a r+ w+ a+ rb wb ab r+b w+b a+b

    encoding: utf-8 gbk unicode......

    s = f.read()                                                                            全部读取

    print(s)

    f. close()

    f = open("123456", mode = "r", encoding = "utf-8")

    for line in f:

        print(line.rstrip())

    f,close()                                                                                读取每一行

     

    f = open("123456", mode = "r", encoding = "utf-8")

    lst = f.readlines()                                                                读取每一行组成的列表(这里是.readlines, 是读取全部的行, 并组成一个列表)

                                                                                                 (如果是.readline就只读取文件的第一行, 读取的结果是一个字符串. 如果这时光标位置不在遗憾的第一个字符前, 从光标位置读到这一行的最后一个字符或 )

    print(lst)

    f.close() 

    二. 文件写入

    f = open("123456", mode = 'w', encoding = "utf-8")

    f.write("999999999")                                                                    把文件123456的内容全部清除, 重新写进字符串999999999

    f.flush()                                                                                         把写进文件123456的所有字符全部写进去

    f.close()

    f = open("123456", mode = "a", encoding = "utf-8")

    f.write(" 66666666666")                                                             把 6666666666666添加到文件123456的最后一个字符的后面(文档结尾)

    f.flush()

    f.close()

    a = open("d:/123.jpg", mode = 'rb')                                              读取一个图片时, 用r w a,Pycharm会选取一种解码方式, 如果是图片格式, Pycharm会无法解码, 导致报错, 所以用rb和wb来读取和写入字节

    b = open('d:/456.jpg', mode = 'wb')                                              Pycharm会自动创建一个456的图片文件

    for i  in a:

        b.write(i)                                                                                    对a文件进行遍历, 把a的每一行字节都写进b

    b.flush()

    a.close()

    b.close()

    三. 读写, 写读, 追加读模式:

    r+ 读写模式, 先读后写

    读取后写入, 都会变成在文档最末尾写入

    写入时, 如果不是在最末尾写入, 会变成插入, 会替代掉后面的字节

    如果先写后读, 写的内容会从第一个字符开始覆盖掉原来文件的字符串的内容, 覆盖的长度按字节来算, 如果写入3个英文字母, 会覆盖掉一个中文字符, 然后从最后一个被覆盖的字符的后面开始读. 

    f = open('123456', mode = 'r+', encoding = 'utf-8')

    s = f.read(3)                                                                               读取3个字符, 不是3个字节, 1个中文或1个字母或1个换行都算一个字符

    print(s)

    s = f.read()                                                                                会在刚才读完后的光标处继续往后读取完所有文件的字符

    print(s)

    f.write('4s3d5g4s35g')                                                               写入的时候光标会直接移到最后, 然后把4s3d5g4s35g添加在文件最后, 这时光标还是在文件最末尾

    print(f)

    f.flush()

    f.close()

    w+写读模式, 先写后读:

    如果一开始就读取, 是读不到东西的

    f = open('123456', mode = 'w+', encoding = 'utf-8')

    f.write('wefakjchakuchahfu')                                                               写入时会覆盖掉以前的内容

    f.seek(0,0)                                                                                          把光标移到初始位置

    s = f.read(10)                                                                                     从初始位置读10个字符

    print(s)

    f.flush()

    f.close()

    a+追加读模式, 先添加后读:

    如果一开始就读取, 和w+一样, 是读不到东西的

    f = open('123456', mode = 'a+', encoding = 'utf-8')

    f.write('abcde12345')                                                                        在最后添加字符串abcde12345

    print(f.read())                                                                                     这时光标在文件的最后, 读取时, 读取不出内容

    f.seek(0)                                                                                            把光标移到第一个位置

    print(f.read())                                                                                     这时可以读取出文档的全部内容

    f.flush()

    f.close()

    四. 光标相关操作

    f.seek(3)                                                                              光标向右移动3个字节, 在utf-8的编码文件中, 是一个中文字符的长度

    print(f.tell())                                                                          显示光标现在的在编码的字节文件的位置, 在f.read(1)后, 如果是读取了一个中文字符, f.tell()会输出3

    f.seek(偏移量, 位置)                                                            参数只有一个时, 表示从开始位置向右移动参数个字节. 位置为0时, 是开头, 1是现在的位置, 2是末尾

    f.truncate(15)                                                                       截断, 从头截断到参数位置

    f.truncate()                                                                           截断, 从从截断到光标位置

    五. os模块

    import os                                                                                                         引入os模块

    with open('123456', mode = 'r', encoding = 'utf-8') as f1,                               用换一行继续写, 方便看

    open('123456_副本', mode = 'w', encoding = 'utf-8') as f2:                             用with就不需要用.close()了

        for line in f1:

            f2.write(line+"a1b2c3d4")                                                                        把f1的每一行字符串都写到f2里, 再添加一个字符串

    os.remove('123456')                                                                                       删除123456文件

    os.rename('123456_副本', '123456')                                                              把文件重命名为123456, 对文件进行更改

  • 相关阅读:
    java中日期格式的转换和应用
    struts2下载
    struts2上传
    div下拉框(待改善)
    jsp中jquery用法一步刷新 验证用户名是否存在
    react 解析json
    babel-polyfill 解决浏览器兼容
    页面跳转缓存 keepAlive
    webpack知识点
    element-ui upload
  • 原文地址:https://www.cnblogs.com/NachoLau/p/9432101.html
Copyright © 2020-2023  润新知