• python文件操作


    1. 文件操作
    open 打开
    f = open(文件路径, mode="模式", encoding="编码格式") 最最底层操作的就是bytes
    打开一个文件的时候获取到的是一个文件句柄.

    绝对路径
    从磁盘根目录开始寻找
    相对路径
    相对于当前程序所在的文件夹
    ../ 上一层文件
    文件夹/ 进入xxx文件夹

    1  f= open("D:西游记金角大王吧.txt", mode="r", encoding="gbk")
    2 print(f.read())
    3 f.close()

    2. mode:

    r: 读取,只读.
    读取文件的相关操作
    1. read()
    默认: 读取文件内容(全部)
    read(n) 读取n个字符
    2. readline() 读取一行
    3. readlines() 读取全部. 返回列表
    (最重要)4. for line in f: 每次读取一行内容

     1 f = open("moder.txt", mode="r", encoding="utf-8")
     2 print(f.read(5))  # 读取5个字符
     3 print(f.read(5))  #继续读5个
     4 print(f.readline().strip())  # 换行符为分割,strip()可以去掉换行. 读取到的内容第一件事就是去掉空白
     5 print(f.readline())
     6 f.close()
     7 
     8 print(f.readlines()) #一次性把文件中的内容读取到列表中
     9 
    10 #文件句柄是一个可迭代对象
    11 #优点:相对来说节省内存,操作相对简单一点
    12 for line in f:  # 从文件中读取到每一行给前面的line
    13     print(line.strip())
    14 f.close()

    w:
    写入. 只写
    创建文件
    会清空文件

     1 # 每次用w模式打开文件,都会清空这个文件(坑)
     2 f = open('胡辣汤', mode='w', encoding="utf-8")  # 可以帮我们创建文件
     3 
     4 f.write('河南特色
    ')
     5 f.write("东北特色
    ")
     6 f.write("陕西特色
    ")
     7 
     8 # 好习惯
     9 f.flush()  #刷新管道, 把数据写入文件
    10 f.close()


    a:
    也可以创建文件
    追加写

    f = open("葫芦小金刚", mode="a", encoding="utf-8") # a, append 追加, 在文件末尾写入内容
    f.write("你叫什么名字阿?")
    # f.read() #not readable
    f.flush()
    f.close()


    r+: 对于文件而言. 应该有的操作就两个:读, 写
    读写操作

    1 f = open("葫芦小金刚", mode="r+", encoding="utf-8")
    2 content = f.read()  # 顺序必须先读,后写
    3 # r+特有的深坑:不论读取内容的是多少,只要你读了.写就是在末尾
    4 f.write('五娃')
    5 print(content)


    w+:
    写读操作

     1 # 一上来会清空文件, 没人用
     2 f = open("葫芦小金刚", mode="w+", encoding="utf-8")
     3 # content = f.read()  # 顺序必须先读,后写
     4 # # r+特有的深坑:不论读取内容的是多少,只要你读了.写就是在末尾
     5 # f.write('五娃')
     6 f.write("有能吐火的, 有能吐水的")
     7 # 移动光标
     8 f.seek(0)  # 移动到开头
     9 s = f.read()
    10 print("========>", s)


    a+:
    追加写读

    所有带b的表示直接操作的是bytes, 当处理非文本文件的时候.

    # 追加写读, 光标在末尾. 所有的写都是在末尾
    f = open("葫芦小金刚", mode="a+", encoding="utf-8")
    f.write("机械葫芦娃召唤神龙, 高喊. 我代表月亮消灭你!")
    f.seek(0)
    s =f.read()
    print("=====>", s)

    rb
    wb

    ab: 断点续传

    r+b
    w+b
    a+b

    3.文件复制

     1 f1 = open("E:/1.png", mode="rb")
     2 
     3 f2 = open("D:/1.png", mode="wb")
     4 
     5 for line in f1:  # line是从f1中读取的内容
     6     f2.write(line)  # 把读取的内容原封不动的写出去
     7 
     8 f1.close()
     9 f2.flush()
    10 f2.close()

    4.seek和tell

     1 f = open("胡辣汤", mode="r+", encoding="utf-8")
     2 f.seek(0, 2)  # 移动到末尾
     3 # content = f.read()
     4 # print(content)
     5 # f.seek(0)  # 移动到开头
     6 # print(f.read())
     7 # print(f.tell())  # 字节
     8 
     9 f.seek(3)
    10 print(f.read())

    5.文件修改

     1 f = open("夸一夸alex", mode="r", encoding="utf-8")
     2 f2 = open("夸一夸alex_副本", mode="w", encoding="utf-8")
     3 
     4 for line in f:
     5     if "好人" in line:
     6         line = line.replace("好人", "sb")
     7     f2.write(line)
     8 f.close()
     9 f2.flush()
    10 f2.close()
    11 
    12 os.remove("夸一夸alex")
    13 
    14 os.rename("夸一夸alex_副本", "夸一夸alex")
    15 
    16 with open("夸一夸alex", mode="r", encoding="utf-8") as f, 
    17         open("夸一夸alex_副本", mode="w", encoding="utf-8") as  f2:
    18     for line in f:
    19         if "好人" in line:
    20             line = line.replace("好人", "sb")
    21         f2.write(line)
    22 
    23 os.remove("夸一夸alex")
    24 os.rename("夸一夸alex_副本", "夸一夸alex")

    6.水果统计

     1 f = open("水果.txt", mode="r", encoding="utf-8")
     2 line = f.readline().strip()
     3 title = line.split(",")  # ['编号','名称','价格','数量','哈哈']
     4 lst = []
     5 
     6 for line in f:  # 1,香蕉, 1.85, 50
     7     dic = {}  # 每行都是一个字典
     8     line = line.strip()  # 去掉空白 
     1, 香蕉, 1.85, 50
     9     data = line.split(",")  # [1, 香蕉, 1.85, 50]
    10 
    11     for i in range(len(title)):
    12         dic[title[i]] = data[i]
    13 
    14     lst.append(dic)
    15 
    16 print(lst)
  • 相关阅读:
    Java 重载机制
    网关、DNS、子网掩码、MAC地址、路由器、猫
    前台?后台?前端?后端?
    JSP初学
    PS笔记
    Pandorabox等类OpenWrt的路由器 实现后端设备接入IPV6(中继代理+NAT)
    三星S5_G9008V 解锁联通4G(安卓6.0)
    一个意外的发现
    硬改路由器-MW310R-AR9341篇
    关于使用硬改的路由器的各种经历
  • 原文地址:https://www.cnblogs.com/beargod/p/10073744.html
Copyright © 2020-2023  润新知