python基础篇 笔记02

—> 太白老师课件 <—

D8 文件操作

1.    文件操作

                 f = open(‘路径’,encoding = 'utf-8', mode = 'r' )
                 f.read()
                 f.close()
                 f 变量     文件句柄     mode默认r (只读)encoding默认gbk编码(windows)
                 open      是windows的系统功能 ,  python调用windows系统功能
                     windows默认编码方式: gbk ; linux 默认编码方式 utf-8 
                      (例如系统自带的记事本)   
                       即:用windows记事本写的文件,编码的方式是gbk。
                      (gbk,utf-8英文无差别,试要试中文) (编码方式在首次文件写入时确定并保存,之后不会变)
 
                 f.close()  关闭文件。
                
                 f.read(n)
                 f.readline()      f.readlines()
                 f.writable()      f.readable()
                
    f.read(n):
    1. 文件打开方式为文本模式时,代表读取n个字符
    2. 文件打开方式为b模式时,代表读取n个字节
    f.seek(n):
       按字节调整光标的位置

    seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
    通常我们使用seek都是移动到开头或者结尾
    移动到开头:seek(0)
    移动到结尾:seek(0,2)
    seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
    f.tell():
    按字节告诉我们当前光标在什么位置
   
 f.truncate(n)
       按字节截取部分文件
       Python 文件 truncate() 方法用于截断文件并返回截断的字节长度。
      指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
 
                 with  open( ...  ) as a,\              自动关闭文件句柄
                         open( ...  ) as b:               一次性操作多个文件句柄
     with open('t1',encoding='utf-8') as f1,\
  open('Test', encoding='utf-8', mode = 'w') as f2:
     f1.read()
     f2.write('老男孩老男孩')
                 
2.      读     r,只读
                 文件以什么编码方式存储的,就以什么编码方式打开。
                 路径问题:
                        r''D:\new1.txt"
                        "D:\\new1.txt"
                 具体读文件中的数据时,用到的五种方式:(读取到的都是字符串)
                 1    f.read()            全读
                 2    f.readline()       一行一行读
                 3    f.readlines()     按行读,存列表,有\n.
                 4    f.read(n)   r模式,按照n个字符读取     rb模式,按照n个字节读取
                 5    for 循环 读取 (i 即代表文件中一行数据)
                       for i in f:
                             print(i.strip())
                              
          写    w:    f = open("d:\\abc.txt", encoding='utf-8', mode = 'w' )
                          没有文件,则先创建;有的话,清空
                          f.write(str1)
                          f.write(str2)  
                          若原文件有内容,先清空,然后str1,str2两个字符串依次写入文件(并不会发生覆盖)
                 wb:    f = open('log', mode='wb')
                           f.write('老男孩教育'.encode('utf-8'))
                           f.close()
                  a:       没有文件,则先创建;有的话,追加
                  rb:
                          只读  以bytes类型读取   涉及非文字类的文件时用rb
 
                  r+:   读写,先读,后追加     若先写后读,则会修改原来的文件,并会改变光标位置      
            注意:如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,
          则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取
      w+:  写读,先写,后读取
 
                  注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
 
3.  文件的修改:
      文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,
  都是模拟出来的效果,具体的说有两种实现方式:
  方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,
    再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
   方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件
1 import os
2 
3 with open('a.txt') as read_f, open('.a.txt.swap', 'w') as write_f:
4     for line in read_f:
5         line = line.replace('alex', 'SB')
6         write_f.write(line)
7 os.remove('a.txt')
8 os.rename('.a.txt.swap', 'a.txt')
 
  
 
 
 

猜你喜欢

转载自www.cnblogs.com/kingon/p/11785680.html