Day 08 文件的读:写:追加等操作

01 今日内容大纲

  1. 文件操作的初识
  2. 文件操作的读
  3. 文件操作的写
  4. 文件操作的追加
  5. 文件操作的其他模式
  6. 文件操作的其他功能
  7. 打开文件的另一种方式
  8. 文件操作的改

02 昨日内容回顾以及作业讲解

  1. 数据类型的补充

    • str:pass
    • tuple
      • (1)---->int 无逗号
      • count index
    • list:
      • sort sort(reverse = True) reverse()
      • 列表相加 与数字相乘
      • 循环列表问题(不要改变列表大小)
    • dic:
      • update 更新,增加值,修改值,创建字典,将一个字典的所有键值对覆盖添加到另一个字典
      • dict.fromkeys(iterable,value) value可变时公用一个#面试
      • 循环字典的问题
    • 数据类型的转换问题:
      • 0,{},[],set(),'',None---->False
  2. 编码的进阶:

    ​ ASCII,gbk,Unicode,utf-8,big5.......

    1. 所有编码本(除Unicode之外)不能直接识别.

    2. 在内存中所有的数据必须是Unicode编码存在,除了bytes

      帮计算机区分不同的类型的数据,根据不同的类型,来进行不同的计算

      int

      bool

      tuple <==> str <>bytes

      list

      dict

      set

03 今日内容

  1. 文件操作的初识

    • taibai.txt

    • 利用Python代码写一个很low的软件,去操作文件.

      • 文件路径:path
      • 打开方式:读,写,追加,读写,写读.......
      • 编码方式:utf-8,gbk,gb2312(一般指信息交换用汉字编码字符集)......
    • f1 = open(r'D:\taibai.txt',encoding='utf-8',mode='r')
              # r 防止\与数字字母结合,影响文件的读写,相对路径下的文件不需要r
      content = f1.read()
      print(content)
      f1.close()
      
    • 代码解释:

      open 内置函数,open底层调用的是操作系统的接口.
      f1,变量,f1,fh,file_handler,f_h, 文件句柄.对文件进行的任何操作都得通过文件句柄的方式.
      encoding:可以不写---->不写参数的话为 默认编码本:操作系统的默认编码
      
      windows: gbk
      linux: utf-8
      mac: utf-8
      f1.close():关闭文件句柄 防止占用过多的内存 # with as下不需要
      
    • 文件操作的三部曲:

      1. 打开文件
      2. 对文件句柄进行相应操作
      3. 关闭文件
    • 报错原因:

      • UnicodeDecodeError:文件存储时 与 文件打开时 的编码本运用不一致

      • 路径分隔符产生的问题

        • r'C:\Users\oldboy\Desktop\taibai.txt'
          
          
  2. 文件操作的读

    r,rb,r+,r+b 四种模式

    ​ r:read()** read(n),readline(),readlines()

    ​ for***

    ​ rb:操作的是非文本的文件,图片,视频,音频

文件操作的读
'''老男孩最好的老师
老男孩教育是最好的学校
fhsjdkfha
fhdsfads'''

# read 全部读出来 **
f = open('文件的读',encoding='utf-8',mode='r')
content = f.read()
print(content)
f.close()

# read(n) 按照 字符(不是字节) 读取
f = open('文件的读',encoding='utf-8',mode='r')
content = f.read(4)
print(content)  #abc太

# readline() 读取一行
f = open('文件的读',encoding='utf-8',mode='r')
print(f.readline())
print(f.readline())
print(f.readline())
'''
abc太白金星最帅

老男孩最好的老师

老男孩教育是最好的学校
'''

# readlines()   #返回一个列表,列表中的每一个元素是源文件的每一行.
f = open('文件的读',encoding='utf-8',mode='r')
content = f.readlines()
for i in content:
    print(i)
    '''
abc太白金星最帅

老男孩最好的老师

老男孩教育是最好的学校

fhsjdkfha

fhdsfads
    '''
print(content)  #['abc太白金星最帅\n', '老男孩最好的老师\n', '老男孩教育是最好的学校\n', 'fhsjdkfha\n', 'fhdsfads\n']
f.close()


# for 读取 ##每一行读一次,然后再读下一行,节省内存
f = open('文件的读',encoding='utf-8',mode='r')
for line in f:
    print(line)
f.close()

#rb 读(操作的是非文本的文件:图片,视频,音频...)(不需要写encoding!!!!!)
f = open('风景.jpg',mode='rb')
pic = f.read()
print(pic)
f.close()
'''f4\'\xd2\xaeX\xeaW\x12\\5\xb0\x8a[f#\xf7\x98S\x9e;\x82N8\xf4\xa4\xe9\xe8TW.\xac\xbe\x97)v\xaa\x05\xb4\
xaas\xb0v\x18\xfa\x9e\x7f*\xbf\r\xa5\xbe\xef\xef\x01\x93\x9d\xdc\xb9\xact\xb8\xb6a\x1cv\xef\xe6\xb1\xe7;\x89\xfet\
x976\x9a\x8d\xf3y\x11\\\xfd\x8e\xd4\x1f\xf5qr_\x1e\xbd\xb9\x15\x1c\x9eb\xd1\xea\xd9\xb5gkew\x1a\x98%l\xe4\x806.......'''
文件操作的写

w,wb,w+,w+b 四种模式

+ 没有文件,则创建文件,写入内容
+  如果文件存在,则清空原文件,再写入新的内容

```python
# 文件操作的写
# 没有文件,则创建文件,写入内容:
f = open('文件的写',encoding='utf-8',mode='w')
f.write('随便写一点什么吧喜喜喜喜喜喜')
f.close()


# 如果文件存在,则清空原文件,再写入新的内容
f = open('文件的写',encoding='utf-8',mode='w')
f.write('太白老师你可太丑了')
f.close()



# wb (复制一张图片)
f = open('风景.jpg',mode='rb')
pic = f.read()
print(pic)
f.close()

f_new = open('风景2.jpg',mode='wb')
f_new.write(pic)
f.close()

  1. 文件的追加

    a,ab,a+,a+b 四种模式

    # 没有文件则创建文件,追加内容
    f = open('文件的追加',encoding='utf-8',mode='a')
    f.write('我再追加一句,太白是真的丑')
    f.close()
    
    # 有文件,则在原文件的最后面追加新内容
    f = open('文件的追加',encoding='utf-8',mode='a')
    f.write('是真的,不信你看')
    f.close()
    
  2. 文件操作的其他模式 r+

    # 读并追加,顺序不能错,先读再加
    f = open('文件的读写',encoding='utf-8',mode='r+')
    content = f.read()
    print(content)
    f.write('太白是真的丑啊,信我啊兄弟们')
    f.close()
    
    # 错误示例:
    f = open('文件的读写', encoding='utf-8', mode='r+')
    f.write('人的一切痛苦,,,本质都是对自己无能的愤怒,,,')
    content = f.read()
    print(content)
    f.close()
    
    
  3. 文件操作的其他功能

    总结:

    • 三个大方向:

      • 读 四种模式,r ,rb ,r+ , r+b
      • 写 四种模式w,wb,w+,w+b
      • 追加 四种模式a ,ab ,a+ ,a+b
    • 相应的功能: 对文件句柄的操作:

      • read

      • read(n)

      • readline()

      • readlines()

      • write()

      • tell()

      • seek()

      • flush()

        #文件操作的其他功能
        # tell 获取光标的位置,单位:字节。
        f = open('文件的读写',encoding='utf-8',) #mode = 'r'可以省略
        print(f.tell())
        content = f.read()
        print(content)
        print(f.tell())
        f.close()
        
        #seek 调整光标的位置
        f = open('文件的读写',encoding='utf-8')
        f.seek(7)
        content = f.read()
        print(content)
        f.close()
        
        # flush 强制刷新
        f = open('文件的其他功能',encoding='utf-8',mode='w')
        f.write('奥术大师克里斯安吉尔')
        f.flush()
        f.close()
        
        
  4. 打开文件的另一种方式:

    # # 打开文件的另一种一种方式
    # # 优点1:不用关闭文件文件句柄
    with open('文件的读',encoding='utf-8') as f1:
        print(f1.read())
    
    # 优点2:可以同时打开多个文件:
    with open('文件的读',encoding='utf-8') as f1,\
        open('文件的写',encoding='utf-8',mode='w') as f2:
        print(f1.read())
        f2.write('阿三大苏打实打实')
    
    # 缺点:待续
    

  5. 文件操作的改

    '''
    1, 以读的模式打开原文件。
    2,以写的模式创建一个新文件。
    3,将原文件的内容读出来修改成新内容,写入新文件。
    4,将原文件删除。
    5,将新文件重命名成原文件。
    '''
    # low版
    import os
    with open('alex的自述',encoding='utf-8') as f1,\
        open('alex的自述.bak',encoding='utf-8',mode='w') as f2:
        old_content = f1.read()
        new_content = old_content.replace('alex','SB')
        f2.write(new_content)
    os.remove('alex的自述')
    os.rename('alex的自述.bak','alex的自述')
    
    #进阶版
    import os
    with open('alex的自述',encoding='utf-8') as f1,\
        open('alex的自述.bak',encoding='utf-8',mode='w') as f2:
        for line in f1:
            new_line = line.replace('SB','alex')
            f2.write(new_line)
    os.remove('alex的自述')
    os.rename('alex的自述.bak','alex的自述')
    
    # 关于清空问题:
    # 关闭文件句柄,再次以w模式打开文件时,才会清空.
    with open('文件的写',encoding='utf-8',mode='w') as f1:
        for line in range(9):
            f1.write('123456789')
    

04 今日总结

文件操作:

  • r w a rb wb r+ ab 重点记
  • read() write tell seek flush
  • 文件的改的代码必须会默写。

05 预习内容

函数的初识 <http://www.cnblogs.com/jin-xin/articles/8241942.html

posted @ 2020-07-08 18:22  Redbean1231  阅读(95)  评论(0)    收藏  举报