第九天- 文件操作 r w a 文件复制/修改

文件操作简介:
使用python来读写文件是非常简单的操作.我们使用 open() 函数来打开一个文件,获取到文件句柄.然后
通过文件句柄就可以进行各种各样的操作了.根据打开⽅方式的不同能够执行的操作也会有相应的差异.
打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式


相对路径 绝对路径:
绝对路径:从磁盘根目录开始寻找到文件目录 如:E:\Python_workspace\t\n\王尼玛.txt
相对路径:从文件保存路径寻找,若在同一层文件夹中,则相对路径就是文件名,
若是上一层.则加上 ../ 以此类推


只读操作模式(r rb):

r 打开文件open() 读取第n个字符.read(n)
1 # r  打开文件open() 读取第n个字符.read(n)
2 f = open("操作文件.txt",mode="r",encoding="utf-8") # f 变量 操控文件的句柄
3 # 注意encoding表示编码集.根据文件的实际保存编码(windows默认为gbk)进行获取数据,常用utf-8
4 content = f.read(3) # 读取第三个字符
5 # content1 = f.read()  # 一次性读取全部字符
6 print(content)
7 # print(content1)
8 f.close()
9 # 注意read(n)读取第n个字符,若再次读取时会在 当前位置继续 去读而不是从头去读取

      rb  常用于非文本文件 在rb模式下.不能选择encoding字符集.

1 # rb 常用于非文本文件 在rb模式下.不能选择encoding字符集.
2 f = open("../问题1.jpg",mode="rb")
3 content = f.read()
4 print(content) # 返回字节 b'\xff\xd8\xff\xe0\x00\x10JFIF\x00......'
5 f.close()
6 # read() 将文件内容全部读取出来 ,缺点:占内存,若文件过大容易导致崩溃

  readline() 读取一行数据
1 f = open("../王尼玛.txt",mode="r",encoding="utf-8")
2 s = f.readline() # 读取一行数据
3 print(s.strip()) # stirp() 去掉空白 空格 \t \n
4 f.close()
 

 

   readlines()将每一行形成一个元素,放到列表中.所有的内容都读取出来.容易出现内存崩溃的问题.

1 lis = f.readlines()  # 一次性全读取出,返回列表
2 lis1 = []
3 for i in lis:
4     lis1.append(i.strip())
5 print(lis1)
6 # readline() readlines()和read()一样 多次读取时不是从头开始 而是接着上面

  

  \n \t 转义字符有固定含义 推荐用 r 取消功能

1 f = open(r"E:\Python_workspace\t\n\666.txt",mode="r",encoding="utf-8")
2 print(f.read())
3 f.close()

read() readlines()都不推荐使用甚至是不使用,特别是在生产环境里!!
1 # read() readlines()都不推荐使用甚至是不使用,特别是在生产环境里!!
2 # 若需要读取 可通过 readline() 一次读取一行  以及循环读取
3 # 循环读取
4 # # 文件句柄是一个可迭代对象(必须掌握)
5 f = open("../王尼玛.txt",mode="r",encoding="utf-8")
6 for line in f: # 当成list读取文件内容 一行一行的读取 每次读的内容都交给前面的变量
7     print(line.strip())
8 f.close()
  注意读取完文件句柄一定要关闭 f.close()



 
  追加(a,ab)

1 # 只要是a或者ab,a+ 都是在文件的末尾写入.不论光标在任何位置.
2 f = open("../王尼玛.txt",mode="a",encoding="utf-8")
3 f.write("这是一只后入的王尼玛!")
4 f.flush()
5 f.close()
6 # ab a+ 模式下一样





# mode:
# r:只读
# w:写, 先清空里面的内容. 然后再写入
# a: 追加写入.



文件操作: w
  只写 w

  注意.写入时,若没文件.则会创建文件,如果文件存在.则将删除(首次)原内容,再写入新内容
1 f = open("哇哈哈.txt",mode="w",encoding="utf-8") # 创建新文件
2 f.write("哇哈哈,爽歪歪")
3 f.flush()  # 刷新 养成好习惯
4 f.write(" 优酸乳,美滋滋啊") # 第二次write不会删除原内容 仅仅写入新内容
5 # f.read() # 只写模式 不能读取 报错 not readable
6 f.close()  # 关闭句柄

  只写 字节 wb

 
1 # wb模式下.可不指定文件的编码.但在写文件时必须将字符串转化成utf-8的bytes数据
2 f = open("小屁孩.txt",mode="wb")
3 f.write("wusir".encode("utf-8"))  # 写入时必须转化成bytes数据
4 f.flush()
5 f.close()
 

 

    文本文件的复制:

1 f1 = open(r"e:\Python_workspace\王尼玛.txt",mode="r",encoding="utf-8")
2 f2 = open(r"g:\王尼玛.txt",mode="w",encoding="utf-8")
3 for line in f1: # 从f1读取数据到变量
4     f2.write(line) # 写入到f2中(关于写入清空:清空只会在open打开再首次write时清空,这里显然不是)
5 f1.close()
6 f2.close()
7 #
8 # gbk  utf-8 为文字编码  这里的复制方法只适用于文本
9 # 若是图片/视频/音频等需编码成bytes再操作,见下文

 

  rb wb ab 把字符换成字节 仅此而已

  b - bytes 读取和写入的是字节,用来操作非文本文件(图片, 音频, 视频)
1 # 复制一张图片 从E盘到G盘,单纯的从bytes角度来复制(bytes适用于所有文件)
2 f = open(r"E:\Python_workspace\问题1.jpg",mode="rb")
3 f1 = open(r"g:\问题1.jpg",mode="wb")
4 
5 for line in f:  # 分批量读取bytes内容(复制的是01代码)
6     f1.write(line) # 因为f1的mode模式有w写入
7 f.close()
8 f1.close()

 

continue...

 

  



 

 
 


 

猜你喜欢

转载自www.cnblogs.com/xi1419/p/9859247.html
今日推荐