2019-07-08 文件操作的补充

一、其他模式补充

  之前学的r(只能读)/w(只能写)/a(只能写)

  今天学的:

  r+/w+/a+(都变成读写模式)

with open(r‘test‘,mode=‘r+‘,encoding=‘utf-8‘) as f:
    print(f.readable())
    print(f.writable())
    print(f.readline())
    f.write(‘嘿嘿嘿‘)

with open(r‘test‘,mode=‘w+‘,encoding=‘utf-8‘) as f:
    print(f.readable())
    print(f.writable())
    print(f.readline())
    f.write(‘嘿嘿嘿‘)

with open(r‘test‘,mode=‘a+b‘) as f:
    print(f.readable())
    print(f.writable())

二、文件内光标移动 

  test文件

f.seek(offset,whence)offset:相对偏移量  光标移动的位数whence:    0:参照文件的开头   t和b都可以使用    1:参照光标所在的当前位置  只能在b模式下用    2:参照文件的末尾  只能在b模式下使用

  注意:在rt模式下,read内的数字  表示的是字符的个数(read(5) 表示读取五个字符)除此之外,数字表示的都是字节

     在rb模式下,read内的数字表示的是字节数(注意:而且三个字节表示一个汉字,一个字节表示一个英文,如果在读汉字的时候,一定要是3的倍数,在转成汉字的时候才不会报错。)

  seek参数为0的时候:(光标在文件的开头)

with open(r‘test‘,‘rt‘,encoding=‘utf-8‘) as f:
    print(f.read(1))   #rt模式数字1代表一个字符    #我
    f.seek(6,0)  # seek移动都是字节数,0代表把光标移动到开头,6代表移动6个字节
    print(f.read(1))  #读取一个字符     #让

with open(r‘test‘,‘rb‘) as f:
    print(f.read(3).decode(‘utf-8‘))   #rb模式,read读的是字节   #我
    f.seek(6,0)    #seek移动6个字节
    print(f.read(3).decode(‘utf-8‘))    #让

  seek参数为1,2的时候:(只能在b模式下使用)

with open(r‘test‘,‘rb‘) as f:
    print(f.read(3).decode(‘utf-8‘))   #rb模式下,数字代表字节   #我
    f.seek(3,1)            #数字1代表光标在当前位置
    print(f.read(6).decode(‘utf-8‘))    #读6个字节     #让你

with open(r‘test‘,‘rb‘) as f:
    print(f.read())    #rb模式读取全部
    f.seek(-6,2)       #数字2代表光标在最后,-6代表光标往前走6个字节
    print(f.read().decode(‘utf-8‘))   #光标在倒数6个字节前面读取所有文件

  前面的都是seek光标读取,我们还可以写入,用r+模式  

with open(r‘test‘,‘r+‘,encoding=‘utf-8‘) as f:
    f.seek(3,0)    #光标从开头数3个字节
    f.write(‘过‘)    #在‘我’后面加上‘过‘

  做一个文件内容更改检测:(另外一个程序对文件test01.txt加入一行文字,每次加入的文字光标都会在最后)

先运行检测文件内容,让循环一直开着,现在光标在文件最后面,然后运行写入操作,文件写入一行,被循环捕捉到内容打印出来,因为文件写入是a追加模式,所以光标放在最后面。输入新内容又被循环捕捉到打印出来,这样一直循环。
with open(r‘test01.txt‘,‘rb‘) as f:
    f.seek(0,2)    # 先将光标移动到文件末尾
    while True:
        res = f.readline()    #读取刚刚文件新加入的一行
        # 查看光标移动了多少位 bytes
        # print(f.tell())
        if res:
            print("新增的文件内容:%s"%res.decode(‘utf-8‘))

  截断文件操作:(注意:参数填的是字节数)

with open(r‘test‘,‘a‘,encoding=‘utf-8‘) as f:
    f.truncate(6)  # 接收的字节的长度 整型
    # 保留0~6字节数 后面的全部删除(截断)

三、修改文件

  第一种方法:在同一个文件中操作(注意:在同一个with下面不能读又写同一个文件)

#操作步骤
#1.先将数据读取到内存中(读文件)
#2.在内存中进行修改(字符串的替换)
#3.再覆盖原文件(写文件)

with open(r‘test02.txt‘,‘r‘,encoding=‘utf-8‘) as f:
    data = f.read()   #读取文件所有内容
    print(data)
    print(type(data))

with open(r‘test02.txt‘,‘w‘,encoding=‘utf-8‘) as f:
    res = data.replace(‘egon‘,‘jason‘)   #修改内容
    print(data)
    f.write(res)   #重新写入文件,因为是w模式,把之前的内容都清空了
优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间缺点:当文件过大的情况下,可能会造成内存溢出

  第二种方法:不在同一个文件中操作(创建一个新文件,把老文件删除)

#操作步骤
#1.新建一个新文件
#2.把老文件的内容读取出来,修改内容,放在新文件中
#3.删掉老文件

with open(r‘test02.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,        open(r‘test02.swap‘,‘a‘,encoding=‘utf-8‘) as write_f:
    for line in read_f:
        new_line = line.replace(‘jason‘,‘egon‘)
        write_f.write(new_line)
os.remove(‘test02.txt‘)   #删掉这个文件
os.rename(‘test02.swap‘,‘test02.txt‘)    #把test02.swap替换成test02.txt
优点:内存中始终只有一行内容 不占内存缺点:再某一时刻硬盘上会同时存在两个文件

读取文件的时候也可以用for循环读出每一行的内容

    

  

原文地址:https://www.cnblogs.com/wangcuican/p/11153000.html

时间: 2024-10-21 23:56:42

2019-07-08 文件操作的补充的相关文章

08 文件操作

本节主要内容: 1. 初识文件操作 2.只读(r, rb) 3.只写(w, wb) 4.追加(a, ab) 5.r+读写 6.w+写读 7.a+写读(追加写读) 8.其他操作方法(seek(n)光标移动到n位置, tell()获取光标的位置, truncate()截断文件) 9.文件的修改以及另一种打开文件句柄的方式 主要内容:?一. 初识?文件操作使?用python来读写?文件是非常简单的操作. 我们使?用open()函数来打开?一个?文件, 获取到?文件句句柄. 然后通过?文件句句柄就可以进

day 08 文件操作

一,初识文件操作: 用open()来打开一个文件,获取到文件句柄,然后通过文件句柄进行各种操作,需要注意的是读取完的文件句柄一定要关闭,使用 f.close() 打开?文件的?方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使?用的是r(只读)模式 二,只读操作: 1. r :只读模式 建一个文件名为"哈哈哈"的文件,然后读一下: f = open("哈哈哈",mode="r",encod

python之路---08 文件操作

二十六.   文件 f = open(文件路径,mode = '模式',encoding = '编码格式') 1.基础 ① 读写时,主要看光标的位置 ②操作完成要写    f.close( ) f.flush( ) ③f  文件句柄是一个可迭代对象  可用for 循环 ④要用  \n  进行增减空白 2.文件路径 ① 相对路径:.相对于当前程序所在的文件夹,如果在文件夹内,直接写名字 不在时,需要出文件或进文件 文件名 /        进文件 ../            出文件 ②绝对路径:

08文件操作(了解)+出识函数

-----------------------------------01 可读可写.py-----------------------------------#r+t:可读.可写 #w+t:可写.可读with open('b.txt','w+t',encoding='utf-8') as f:# print(f.readable())# print(f.writable())#a+t:可追加写.可读 #r+b#w+b#a+b with open('b.txt',mode='rb') as f:

python note 08 文件操作

1.相对路径与绝对路径比较 #绝对路径 f = open('d:\pzw.txt',mode='r',encoding='UTF-8') content = f.read() print(content) f.close() #相对路径 f = open('pzw',mode='r',encoding='utf-8') content = f.read() print(content) f.close() 2. #对于r就是只读 f = open('pzw',mode='rb',) conten

Python之旅的第3²+1天(文件操作、迭代器、生成器)

今天计划看的一个关于昨天内容的博客最终还是没看,躺下的感觉总是那么爽,爽到你不想起床,但是早晨是例外的,因为精神可以控制肉体. 首先是关于文件操作的补充: # 以字节形式读取文件: # f = open('test.txt','rb') #注意:如果以字节形式读取文件,此时是不能设置encoding = # f.close() # 关于换行,当你以readlines读取文件的时候会获得\r\n,但是Python会自动帮你转换为\n # 通过在打开文件后面设置上newline # f = open

C语言之文件操作08——总结

C程序的文件操作共涵盖7个例题,包含格式打印,文件读取,条件查找,矩阵的文件操作,数据格式输入及调用计算等内容. 文件操作使得程序有更强的拓展性,使其可以单独保存数据,这为程序的调试和优化打下了坚实的基础,为我们实现大规模计算提供了可能.至此,相信大家对文件操作也有了比较好的认识,无非是写入.读取.调用. 我们常常会听说C的强大,也是因为她有着文件操作的功能,而文件数据是可以方便重写和维护的. MATLAB数学软件是一款十分强大的工具型软件,它是通过C语言来表达算法的,作为面向过程的编程语言C,

python学习点滴记录-Day02补充-文件操作

字符编码: 把人类的字符翻译成计算机能认识的数字 字符编码表 存放着人类字符和计算机数字的对应关系表 ascii.gbk.utf-8.unicode unicode>encode(utf8)>bytes bytes>decode(utf8)>unicode 文件处理补充: 字符以什么格式编码的,就要以什么格式解码 文件的打开模式 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文

C#语言-07.文件操作

a. 文件操作:适用于相对简单的数据保存 i. 读写文件的步骤: 1. 创建文件流 2. 创建读写器 3. 读写文件 4. 关闭读写器 5. 关闭文件流 ii. FileStream(文件流),它主要用于读写文件中的数据,创建一个文件流时,需要指定操作文件的路径,文件的打开方式和文件的访问方式 1. 语法:FileStream 文件对象=new FileStream(String FilePath,FileMode); a. FileMode :打开文件的模式 i. 文件读写器 1. Strea