zoukankan      html  css  js  c++  java
  • 08_python_文件操作

    一、初始文件操作

      打开⽂件的⽅式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤的是r(只读)模式
    1 f = open("少妇嫩模.txt",mode="r", encoding="utf-8")  # 注意encoding表示编码集. 根据文件的实际保存编码进行获取数据
    2 文件句柄     文件路径    操作模式     使用编码
    3 f.close() # 打开一个文件后必须将其关闭

    二、读

      1、只读( r   r+)
      rb. 读取出来的数据是bytes类型, 在rb模式下.。不能选择encoding字符集, rb的作⽤: 在读取非⽂本⽂件的时候. 比如读取MP3. 图像. 视频等信息的时候就需要⽤到 rb. 因为这种数据是没办法直接显⽰出来的
    1 f = open("少妇嫩模.txt",mode="rb" )
    2 content = f.read()
    3 print(content)
    4 f.close()
    5 结果:
    6 b'xe6xafx85xe5x93xa5, xe5xa4xaaxe7x99xbd,
    7 wuse
    xe5x91xb5xe5x91xb5
    xe6x97xa5xe5xa4xa9'
      绝对路径:(1)从磁盘根目录找  (2)网络上的路径
      相对路径:相对于当前你这个程序所在的文件夹   ../  返回上层目录
     
      2、读取文件的方法
        (1)read() 将文件全部读取出来,弊端:占内存,如果文件过大,会导致内存溢出
    1 f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
    2 content = f.read()
    3 print(content)
    4 
    5 f.read(3) #表示读取3个字符需要注意的是. 如果再次读取. 那么会在当前位置继续去读而不是从头读, 如果使用的是rb模式. 则读取出来的是n个字节
     (2)readline()
        ⼀次读取⼀⾏数据, 注意: readline()结尾, 注意每次读取出来的数据都会有⼀ 个 所以呢. 需要我们使⽤strip()⽅法来去掉 或者空格
        (3)readlines()
        会把数据全部读出来,同样会导致内存溢出
        (4)for循环迭代文件句柄读取文件(推荐
    1 f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
    2 for i in f:
    3     print(i, end = ',')  # print(self, *args, sep=' ', end='
    ', file=None)  可以修改end 把
    换成别的
    4 f.close() # 操作完成必须关闭字典

    二、写( w wb)

      注意:写的时候. 如果没有⽂件. 则会创建⽂件, 如果⽂件存在. 则将原件中原来的内容删除, 再 写入新内容
     1 f = open("娃娃", mode="w", encoding="utf-8")
     2 f.write("狮王")
     3 f.flush() # 刷新. 养成好习惯
     4 f.close()
     5 
     6 
     7 
     8 
     9 f.write('a')
    10 f.write('b') # 第二次写的时候是不会清空的了,直接追加写

      wb模式下. 可以不指定打开⽂件的编码. 但是在写⽂件的时候必须将字符串转化成utf-8的 bytes数据

    1 f = open("⼩娃娃", mode="wb")
    2 f.write("⾦⽑狮王".encode("utf-8"))
    3 f.flush()
    4 f.close()

    三、追加( a ab)

      在追加模式下,写入的内容会追加到文件末尾
    1 f = open("⼩娃娃", mode="a", encoding="utf-8")
    2 f.write("麻花藤的最爱")
    3 f.flush()
    4 f.close()

    四、读写模式

      对于读写模式. 必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了之后再进⾏ 写入. 我们以后使⽤频率最⾼的模式就是r+

    五、写读模式

      先将所有的内容清空. 然后写入. 最后读取. 但是读取的内容是空的, 不常⽤。a+模式下, 不论先读还是后读. 都是读取不到数据的. 

    六、其他操作

      1、seek(n)
      seek(n) 光标移动到n位置, 注意, 移动的单位是byte. 所以如果是UTF-8的中⽂部分要 是3的倍数.
      通常移动光标都是将其移动到开头和结尾  (1) 开头 f.seek(0)   (2) 结尾 f.seek(0, 2) # seek的第⼆个参数表⽰的是从哪个位置进⾏偏移, 默认是0, 表 ⽰开头, 1表⽰当前位置, 2表⽰结尾
     1 f = open("⼩娃娃", mode="r+", encoding="utf-8")
     2 f.seek(0) # 光标移动到开头
     3 content = f.read() # 读取内容, 此时光标移动到结尾
     4 print(content)
     5 f.seek(0) # 再次将光标移动到开头
     6 f.seek(0, 2) # 将光标移动到结尾
     7 content2 = f.read() # 读取内容. 什么都没有
     8 print(content2)
     9 f.seek(0) # 移动到开头
    10 f.write("张国荣") # 写⼊信息. 此时光标在9 中⽂3 * 3个 = 9
    11 f.flush()
    12 f.close()
      2、tell()
        获取光标位置
      3、truncate() 截断文件
     1 f = open("娃娃", mode="w", encoding="utf-8")
     2 f.write("哈哈") # 写入两个字符
     3 f.seek(3) # 光标移动到3, 也就是两个字中间
     4 f.truncate() # 删掉光标后面的所有内容
     5 f.close()
     6 
     7 
     8 
     9 f = open("娃娃", mode="r+", encoding="utf-8")
    10 content = f.read(3) # 读取12个字符
    11 f.seek(4)
    12 print(f.tell())
    13 f.truncate(12) # 如果给了参数会以参数位置有限光标,参数后面的所有内容全部都删掉
    14 # print(content)
    15 f.flush()
    16 f.close()

    七、文件修改

    1 import os
    2 with open("娃娃", mode="r", encoding="utf-8") as f1,     # 连接后面的语句
    3  open("娃娃_new", mode="w", encoding="UTF-8") as f2:
    4     for line in f1:
    5     new_line = line.replace("", "冰糖葫芦")
    6     f2.write(new_line)
    7 os.remove("娃娃") # 删除源文件
    8 os.rename("娃娃_new", "娃娃") # 重命名新文件

    八、网络请求

    1 import requests  # 导入网络请求包
    2 re = requests.get('http://t2.hddhhn.com/uploads/tu/201610/198/jnrqtcnyywt.jpg')
    3 f2 = open('e:/genren.jpg', mode='wb')
    4 f2.write(re.content)
    5 f2.flush()
    6 f2.close()
    7 print()

     

  • 相关阅读:
    突出展示案例
    下拉菜单案例
    推送人群的选择【技术篇】
    Couchbase 中的分布式储存
    开始了大概三四天的Rails学习之路
    分层架构与公司组织
    极光推送助推视频App,打造最活跃手机新媒体平台
    极光推送CTO黄鑫:技术人员要建立自己的知识图谱
    Android SDK教程
    Android消息推送 SDK 集成指南
  • 原文地址:https://www.cnblogs.com/hq82/p/9637122.html
Copyright © 2011-2022 走看看