Knight_day8

【初识文件操作、读:r, rb, r+, r+b、写:w, wb, w+, w+b、追加:a, ab, a+, a+b、其他方法、刷新缓冲区】

  • 初识文件操作

    文件路径:d:abc.txt

      绝对路径:从根目录开始

      相对路径:当前文件夹

    编码方式:utf-8,gbk,gb2312等

    操作方式:只读,只写,写读,读写,追加等。

f = open(r'd:\abc.txt', encoding='utf-8', mode='r')
content = f.read()
print(content)
f.close()
'''
f:变量。也写作f_obj, f_handler, f_h, fh等,文件句柄。
open():python内置函数(内部调用的是相应系统的命令如Windows)
\发生歧义,1.在路径前加r  2.每个\变成\\
'''

    流程:1.打开文件,产生文件句柄。

       2.对文件句柄操作。

       3.关闭文件句柄

    总而言之,注意光标位置。

  • 读:r, rb, r+, r+b

    rb:文件操作中凡是带b,都是与非文字类文件相关的。(b为bytes,不用encoding)

    r模式的读操作:

      1.read() 全部

      2.read(n) 指定读的字符数。rb模式下n为字节数

      3.readline() 按行读,超过了读空白,可指定n读几个字符,n >= 当前行字符数,或不写 --> 全读。n < 当前行字符数 --> 读n个字符

#while循环实现读取全部内容
f = open(r'd:\123.txt', encoding='utf-8', mode='r')
#先读取一行
res = f.readline()
#不为空,开始循环
while res:
    print(res)
    res = f.readline()

      4.readlines() 按行读,返回列表

      5.for循环(1.内存中只占一条,避免全读内存不够 2.文件句柄是可迭代对象)

        for line in f:

          print(line.strip())

        f.close()

    r+:先读,光标移到到最后,再写,写在最后,光标也在最后。

      先写,光标在开头,覆盖相应字节(注意是字节),再读,从覆盖写入的结尾开始读。

      即,光标默认在开头。

  • 写:w, wb, w+, w+b

    没有文件就创建,有文件先清空,再写入

    写入内容只能是str或bytes

#复制图片
#先读再写
f = open('hunian.jpg', mode='rb')
content = f.read()
f.close()

f = open('xiaohu2.jpg', mode='wb')
f.write(content)
f.close()

#利用with整合代码
#注意:with方法不需要close
with open('hunian.jpg', mode='rb') as f1, open('xiaohu2.jpg', mode='wb') as f2:
    content = f1.read()
    f2.write(content)

    w+:可写可读,不能只读,没有就创建,每次先清空再写入。

    注意:在产生文件句柄时才清空

  • 追加:a, ab, a+, a+b

    没有文件就创建,有文件在内容最后追加,换行追加可以在追加内容前加换行符\n

    a+:可写可读,没有文件就创建,默认光标在尾部,不管如何移动,强制末尾写入。

  • 其他方法

    readable():是否可读

    writable():是否可写。返回T/F

    seek():按字节位置移动光标。seek(0)移动到开头。seek(0, 2)移动到末尾(2代表从右向左)。注意点:有可能把光标移动到某个字符的字节中。

    tell():返回光标左侧所有字节数。

    truncate():把要截取的字符串提取出来,清空内容将提取的字符串重新写入文件中(按字节)。

    writelines():将内容是字符串的可迭代数据写入文件,需同时满足。如全为字符串的列表。

  • 刷新缓冲区

    1.文件关闭。close

    2.程序运行结束

    3.缓冲区满了

    4.手动刷新。flush

     故每次将文件关闭是必要的,否则如程序没有执行结束,不会自动刷新。

posted @ 2022-02-09 18:56  夜色无边  阅读(74)  评论(0)    收藏  举报