文件处理(2)

文件处理

open()

f = open("文件路径","打开文件模式","指定的字符编码")

f:文件句柄

#del f

f.close()  #回收操作系统的资源

文件上下文处理:

withopen ('文件路径','打开文件模式','指定的字符编码') as f:

文件打开模式:

r:只读:

  1.只读,不写

  2.文件不存在,就会取消

w: 只写:

  1.只写,不读

  2.如果文件不存在,会创建新文件

  3.存在,清空再写

a:追加写:

  1.只写,不读

  2.不存在,创建新文件

  3.存在,原据末尾添加新数据

文件处理模式:

  t:文本模式

    只能与r、w、a连用

    默认情况下是rt模式

  b:bytes模式

    处理:二进制数据

    只能与r,w,a连用

文件处理内置方法:

  读: f.read()  读文件,一次性读出所有文件

    f.readline()  一次读一行

    f.readlines() 全部读入内存,以换行符分隔,存入列表

    f.readable()  是否可读

  写:

    f.write()  写文件

    f.writeable ()  判断是否可写

    f.writelines()   for + f.write

  
文件模式的补充:

  "r w a" 纯净模式

  r+,w+,a+:可读可写

可以先读后写

但是不可以先写后读

文件内光标的移动:

  f.read('字符位数')

提供了一种查看源码和文档的方式:

  f.seek(3,0)_doc_

  f.seek(offset,whence)

offset:相对偏移度(光标移动的位数)针对的是字节

whence:指定光标位置从何开始

  0:从文件开头

  1: 从当前位置     .decode()方法

  2:从文件末尾

补充:

  utf—8:

    中文是三个bytes

    英文是一个bytes

  rt:

    read里参数针对字符

    其他都是针对字节

  gbk:

    全是二个bytes

  不设置encoding,默认是gbk

  与encode无关,encoding只是参数

例题:模拟日志功能

# 写入文件
import time

res = time.strftime('%Y-%m-%d %H-%M-%S')

with open(r'file/aa.txt', 'a', encoding='utf-8') as f:
    for i in range(100):
        f.write(f'{res}: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你!
')
import time

with open(r'file/aa.txt', 'r', encoding='utf-8') as f:
    f.seek(0, 2)
    while True:
        time.sleep(60)
        re = f.readline()
        if re:
            print(re, end='')
aa.txt文件
019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你!

  

修改文件方式:

# 修改文件
# 第一种方式
# with open(r'file/a.txt', 'r', encoding='utf-8') as f:
#     data = f.readline()
#     print(data)
#     print(type(data))
# with open(r'file/a.txt', 'w', encoding='utf-8') as f:
#     res = data.replace('asd', '姚某人')
#     print(res)
#     f.write(res)
#

# 第二种方式
import os

with open(r'file/a.txt', 'r', encoding='utf-8') as rf, 
        open(r'file/a1.txt', 'w', encoding='utf-8') as wf:
    data = rf.read()
    re = data.replace('asd', '姚某人')

    sum1 = wf.write(re)
    print(sum1)
    # print(1)
os.remove(r'file/a.txt')
os.rename(r'file/a1.txt', r'file/a.txt')
# print(1)
这里导入了一个os包,调用了remove()方法,调用了rename()
a.txt


你是谁啊asd你是谁啊
执行后:
a.txt

你是谁啊姚某人你是谁啊
原文地址:https://www.cnblogs.com/godlover/p/11823317.html