码迷,mamicode.com
首页 > 其他好文 > 详细

操作文件的方法

时间:2019-11-08 21:18:10      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:就是   打开   实时   没有   方法   控制   函数   gbk   encode   

1、重点

读文件

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

f.readline() # 读取一行内容,光标移动到第二行首部

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

f.read()与f.readlines() #都是将内容一次性读入内容,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:
# 方式一
with open(a.txt,mode=rt,encoding=utf-8) as f:
    for line in f:
        print(line) # 同一时刻只读入一行内容到内存中
# 方式二
with open(1.mp4,mode=rb) as f:
    while True:
        data=f.read(1024) # 同一时刻只读入1024个Bytes到内存中
        if len(data) == 0:
            break
        print(data)

写操作
f.write(1111\n222\n)  # 针对文本模式的写,需要自己写换行符
f.write(1111\n222\n.encode(utf-8))  # 针对b模式的写,需要自己写换行符
f.writelines([333\n,444\n])  # 文件模式
f.writelines([bytes(333\n,encoding=utf-8),444\n.encode(utf-8)]) #b模式

2、主动控制文件内指针移动

with open(林允儿.txt,r,encoding=utf8)as f:
    print(f.read(6)) #‘r‘默认为rt,r读取6个字符
with open(林允儿.txt,rb)as f:
    print(f.read(3)) # rb读取3个bytes

f.seek(offset,whence)

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

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

0:从文件开头

1:从当前位置

2:从文件末尾

补充:

utf-8:

中文是3个bytes

英文是1个bytes

gbk:

中文是2个bytes

英文是1个bytes

open函数不设置encoding,默认是gbk

与encode一毛钱都没有,encoding只是一个参数

除了read里面的参数是针对字符,其他都是针对字节

with open(林允儿.txt,rb)as f: #默认打开文件的编码是gbk
    f.seek(3,0)  # 光标指在3个字节后面, 因为是rb,如果是rt就是指在3个字符后面
    print(f.tell()) # 打印出光标指在的位置
    print(f.read(2))

解码:

with open(林允儿.txt,mode=rb) as f:
    f.seek(3,0)
    print(f.tell())
    print(f.read(3).decode(utf8)) # 读了3个字节,解码成utf8后就是一个中文字的字节

 

编码:

with open(林允儿.txt,r) as f:
    f.seek(3,0)
    print(f.tell())
    print(f.read(2).encode(gbk)) # r是读字符,,所以读了2位字符后编码成gbk,所以就是4个字节

1模式:

with open(林允儿.txt,rb)as f:
    f.seek(3,1)   # 1就是当前光标位置
    print(f.tell())
    print(f.read(3).decode(utf8)) # 文档怎么编码就用什么解码

2模式:

with open(林允儿.txt,mode=rb) as f:
    f.seek(-6,2)  # 2是光标位置在末尾,-x:往前x字节
    print(f.tell()) #光标目前所在的位置,从前往后数
    print(f.read(5).decode(utf8)) # read是往后读

写入文件:

import time

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

with open(林允儿.txt,a,encoding=utf-8)as f:
    for i in range(5):
        f.write(f{res}:sean老师手下留情\n)

修改文件内容:

方案一:

with open(林允儿.txt,r,encoding=gbk) as f:
    data = f.read()
    print(data)
    print(type(data))
with open(林允儿.txt,w,encoding=gbk) as f:
    res = data.replace(查楚文,大大)
    f.write(res)

方案二:

import os  # os模块 在修改文件和重命名等操作时都要加

with open(林允儿.txt,r)as rf,        open(作业2.txt,w)as wf:
    data = rf.read()
    res = data.replace(大大, 查楚文)
    wf.write(res)

os.remove(林允儿.txt)
os.rename(作业2.txt,b.txt)

获取实时动态:

操作文件的方法

标签:就是   打开   实时   没有   方法   控制   函数   gbk   encode   

原文地址:https://www.cnblogs.com/hyukoh/p/11822900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!