Seventh 文件操作/

f1 = open('文件路径', encoding='utf-8', mode='r')

 

以上为文件句柄,接下来对文件的任何操作,都需要借助文件句柄操作

    1、打开文件产生文件句柄

    2、对文件句柄进行操作

    3、关闭文件句柄(如果不关闭则文件句柄永远存在,导致内存空间越来越少)

open() 内置函数  这个函数实际上是调用操作系统的对文件操作的功能

注意报错情况,可能在调用那里

各个系统默认的编码方式:

      Window : 默认的编码方式gbk

      Linux     : 默认的编码方式utf-8

      IOS      : 默认的编码方式utf-8

1、文件的 读 模式 

#模板
f1 = open('file1', ecoding='utf-8', mode='r')    #只读模式可以省略mode,默认只读
content = f1.read()
print(content)
f1.close()

   'r' 下的五种读取方式:

      1、read() 

      2、read(n) #读n个字符 

      3、readline()按行读取 

      4、readlines()返回一个列表,列表中的每个元素是原文件的每行的数据

      5、for循环

   'rb'  模式,b模式操作的文件是非文字类的文件:图片,视频,音频等

      跟r模式一样有五种读取方式,区别在于encoding不是utf-8,如下:

      read(n) #读n个字节,如果读2个字节的中文就会报错

f1 = open('file1', mode='rb')
print(f1.read())
f1.close()

     'r+' 模式,先读后写(后追加),如果先写后读就会先把内容删掉,再添加

      实际上就是先读把光标移动至最后,再添加

f1 = open('file1', encoding='utf-8', mode='r+')
content = f1.read()
fl.write('xxx')
f1.close

2、文件的 写 模式:没有文件创建文件写入,有文件清空原文件写入新内容

    'w' 模式 必须是以字符串的内容写入,同时还有w wb w+ w+b

#模板
f1 = open('file2', encoding='utf-8',mode='w')
f1.write('xxx')
f1.write('xxx')    #如果文件句柄在没有关闭的情况下继续添加,则不会清空内容
f1.close()
#图片等非文字类型模板
f1 = open('xxx.jpg', mode='rb')
content = f1.read()    #以bytes读取原图片获取数据
f1.close    #此时f1的bytes已经赋值到content中
f2 = open('xxx1.jpg', mode='wb')    打开或创建一个新的列表
f2.write(content)    将数据写入到一个新文件图片
f2.close()    #完成对原图片的复制

3、文件的 追加 模式 没有文件则创建文件追加内容,有则在原文件末尾追加新内容

    'a' 模式 :同时还有a ab a+ a+b

4、文件操作:其它操作方法

    readable() writable() 判断一个文件句柄是否可读,可写。

    seek(n) tell() 按照字节去调整光标位置(中文为3个字节,所以不能调整2个字节)、读光标的位置

    truncate 截断数据,仅保留指定前的数据,必须在可写模式且非w模式下,只能从头截取不能移动光标截取

5、另一种打开文件的操作方式:

    1、自动关闭句柄

#模板
with open('file1',encoding='utf-8',mode='r') as f1:
        content1 = f1.read()
        print(content1)
#同一语句可操作创建多个文件句柄
with open('file1',encoding='utf-8',mode='r') as f1,\    #这里的\用于段行, 
              open('file2',encoding='utf-8',mode='r') as f2:        一行不能过长
                            

6、文件的改:

    1、方法一:

#改,方法一,模板
#1、以读的模式打开原文件,产生文件句柄f1
#2、以写的模式打开新文件,产生文件句柄f2
import os    #调用模块
with open('log',encoding='utf-8') as f1,\
        open('log.bak',encoding='utf-8',mode='w') as f2:
#3、读取原文件,讲原文件的内容改写成新内容写入新文件
        old_content = f1.read()
        new_content = old_content.replace('old','new')
        f2.write(new_content)
#4、删除原文件
os.remove('log')
#5、将新文件重命名成原文件
#or.rename('log.bak', 'log')

    2、方法二:

#升级版 模板
import os
with open('log',encoding='utf-8',mode='r') as f1, \
        open('log.bak',encoding='utf-8',mode='w') as f2:
        # 读取原文件,将原文件的内容改写成新的内容写入新文件
        for line in f1:
                new_line = line.replace('xxx','sss')
                f2.write(new_line)
#删除原文件
os.remove('log')
os.rename('log.bak','log')

 

 

    

posted @ 2018-12-27 18:30  pythonernoob  阅读(118)  评论(0)    收藏  举报