python入行011、012(文件处理)

1 创建文件对象

  open()函数用于打开一个文件,并且返回文件对象。

  open(file, mode='r',encoding=None) 其中,file是必须传入的参数,mode和encoding是两个重要的默认参数。

    file—文件路径(相对路径或绝对路径),找不到会报错;

    文件读写处理模式:

    r—文件以只读的方式打开,文件的指针放在文件的开头,这是默认的模式;

    w—打开一个文件只用于写入,若文件已存在则将文件内容删除,从头开始写入,否则创建新文件;

    a—打开一个文件用于追加,若文件已存在,文件指针放在文件的末尾,否则创建新文件;

    x—只写模式,创建新文件,若文件已存在则报错;

    +—可读可写。

    控制文件读写内容的模式:

    t—读写的单位是str类型

    b—读写的单位是bytes类型

    encoding:由于windows系统默认的是gbk格式,所以一定要手动输入utf-8。

  使用open()函数一定要保证关闭文件对象,即调用close()函数。# 回收操作系统资源

f = open('text.txt', mode='r', encoding='utf-8')
res = f.read()
print(res, type(res))
f.close()
f.read()
>>>ValueError: I/O operation on closed file.

2 with open()

  使用with open() as f:的语法,就不需要手动调用close()函数。

  f 是一个可迭代器,可以使用for循环遍历取值。

3 文件处理案例

  mode = 'r'    用户输入的数据与文件中的数据库是否匹配

with open('text.txt', mode='r', encoding='utf-8') as f:
    for i in f:
        inp_name = input("请输入用户名:").strip()
        inp_pwd = input("请输入密码:").strip()
        x, y = i.strip().split(':')
        if inp_name == x and inp_pwd == y: print("输入正确") break else: print("重新输入") else: print("找不到")

  mode = 'w'       拷贝一份新文件

with open('text.txt', mode='r', encoding='utf-8') as f1,\
        open('text3.txt', mode='w', encoding='utf-8') as f2:
    res = f1.read()
    f2.write(res)

4 文件处理方法

  一般情况下使用for line in f:这种语法,目的是防止文件内容过大,一次性加载会占用过多内存空间。  

  循环读取文件

  方式一:自己控制每次读取的数据量(只针对模式为b的情况)

with open(r'test.jpg',mode='rb') as f:
    while True:
        res=f.read(1024) 
        if len(res) == 0:
            break
        print(res)

  方式二:以行为单位读,当一行内容过长时会导致一次性读入内存的数据量过大

with open(r'g.txt',mode='rt',encoding='utf-8') as f:
    for line in f:
        print(line)

with open(r'g.txt',mode='rb') as f:
    for line in f:
        print(line) with open(r'test.jpg',mode='rb') as f: for line in f: print(line)

  f.read()  # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾

  f.readline()  # 读取一行内容,指针移到下一行头部

  f.readlines()  # 读取每一行内容,存放于列表中

  f.writelines()  # 参数是列表

5 控制文件读写内容的模式

  mode = 't'

  ——只针对文本文件

  ——读写都是str类型的字符,表示unicode字符

  ——必须指定编码格式,即encoding参数的值

  mode = 'b'

  ——针对所有类型的文件(图片、视频等)

  ——读写都是bytes类型的字符,表示按照特定编码方式编码后的字符

  ——不能指定编码格式

6 控制文件内指针移动

  文件内指针移动都是以字节为单位的,唯一例外的是t模式下的read(n),n是以字符为单位。

  模式控制:

    0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的;

    1: 该模式代表指针移动的字节数是以当前所在的位置为参照的;

    2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的;

    强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用。

7 修改文件两种方式

  (1)将文件内容一次性加载入内存,在内存中修改完毕后再覆盖硬盘中的源文件。

  (2)将源文件一行一行加载入内存,再创建一个新文件,将修改好后的内容一行一行写入新文件,写入完成后用新文件替换源文件。

猜你喜欢

转载自www.cnblogs.com/mmmmmrz/p/12533108.html
今日推荐