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()

     

  • 相关阅读:
    Codeforces Beta Round #92 (Div. 2 Only) B. Permutations 模拟
    POJ 3281 Dining 最大流 Dinic算法
    POJ 2441 Arrange the BUlls 状压DP
    URAL 1152 Faise Mirrors 状压DP 简单题
    URAL 1039 Anniversary Party 树形DP 水题
    URAL 1018 Binary Apple Tree 树形DP 好题 经典
    pytorch中的forward前向传播机制
    .data()与.detach()的区别
    Argparse模块
    pytorch代码调试工具
  • 原文地址:https://www.cnblogs.com/hq82/p/9637122.html
Copyright © 2011-2022 走看看