python之路 ----文件1

文件:

   文件是操作系统提供给应用软件操作硬盘的一个虚拟单位,用于应用软件将数据永久保存

文件处理基础知识

   1. 应用软件通过系统软件去控制硬件

   2.打开文件:f = open('文件路径',mode='打开方式',encoding='操作文件的字符编码')

       f = open('')相当于创建一个python变量,在程序结束时,变量被回收,但是此时操作系统仍然打开着文件,意味着每open(‘’)一次,实际上占用了两个内存资源:1.python在应用软件空间内为变量所指对象创建的命名空间(与放程序的空间不同),2:操作系统打开文件时所获得的文件编号(操作系统能打开的文件数量有限,如果达到上限,就无法再打开文件,这让我想起了磁盘满的两种情况:1.innode号好满,2.数据block满)

  3.读/写

  4.关闭:f.close()  ---应用软件给操作系统发送请求,使操作系统关闭文件,回收系统文件资源

文件上下文管理器:

        with open('') as f:

              1.可自动执行关闭操作(无需f.close())

              2.可连续打开多个文件(with open('') as f,open('') as f1:)

        对于循环按行读取文件内容:

               1.with open('') as f:                                                   2.with open('') as f:  

                         for line in f:                                                                for line in f.readlines():

                               print(line,end='')                                                           print(line,end='') 

               ------->使用文件自身的迭代器                      ----->将文件一次性读到列表内,但是文件内容过大时,内存会崩溃

文件操作:

   f = open(‘’),默认是以r t方式打开(只读文本方式),默认打开文件的编码是当前操作系统的默认字符编码(中国版的win为gbk,linux,mac为utf-8)

    操作文件的三种方式:r:只读方式,w:只写覆盖方式,a:只写追加方式

        r模式下:

            1. f.read(N):如果不指定N:从光标处读取整个文件,指定N:读取N个字符(不要忘记\n),可配合seek()读取指定字符。(只有在rt模式下的read(N)单位是字符,除此之外文件内的指针移动都是以字节为单位的)

            2. f.readable(N):   ---查看文件是否可读

            3.f.readline():从光标处开始,读取一行

            4.readlines():从光标处开始,读取整个文件到字符串列表

            5.f.write()   ---在文件光标处,写入字符串             6.f.writelines()   ---把列表内的字符串写入文件

注意:f.seek(offset,whence):

offset代表偏移量.即偏移字节数.使用偏移量的时候注意字符编码,gbk一个中文字符由两个字节表示,utf-8通常由3个字节表示,如果偏移半个字符就会造成错误

f =open('test.txt',encoding='utf-8')
f.seek(2)
print(f.read())
f.close()

------->
File "C:\Python\Python36-32\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8a in position 0: invalid start byte

whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;

0代表从文件开头开始算起,

1代表从当前位置开始算起,

2代表从文件末尾算起

1,2只能在b模式下使用

#你hello好  文件内容

with open('a.txt','r',encoding='utf-8') as f:
    msg1=f.read(1)
    print(f.tell())
    f.seek(3,0)
    msg2=f.read(1)
    print(msg1,msg2)
--->执行
3   ---说明在rt模式下read()是以字符为单位的
你 h  ---说明seek()是以字节为单位的
如果seek()使用1/2模式皆会报错,只能在b模式使用!
with open('a.txt','rb') as f:
    msg1=f.read(3)
    print(f.tell())
    f.seek(3,1)
    msg2=f.read(1)
    print(msg1, msg2)
    print(msg.decode('utf-8'),msg2.decode('utf-8'))
--->执行
3  ---说明在b模式下read()是以字节为单位的
b'\xe4\xbd\xa0' b'l'
你 l
with open('a.txt','rb') as f:
    f.seek(-3,2)
    msg = f.read(3)
    print(msg.decode('utf-8'))
--->读取最后一个字符

truncate(N):截断文件,删除指定字节数后的全部内容...

           

  

     

          

猜你喜欢

转载自blog.csdn.net/ltfdsy/article/details/81148780
今日推荐