zoukankan      html  css  js  c++  java
  • py 的 第 8 天

    文件操作

    本节主要内容

    1初识文件操作

    2只读 r,rb    只写w,wb追加a,ab   r+读写,w+写读,a+写读(追加写读)

    3其他的操作方法

    4文件的修改以及另一种打开文件句柄的方式

    主要内容

    一初识文件操作

    使用py来读写文件是很简单的操作,我们使用open()函数来打开一个文件,获取到文件的句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开方式的不同能够执行的操作也会有相应的差异   打开文件方式r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b默认使用的是r(只读)模式

    二只读操作(r,rb)

    变量名=open(‘文件夹名’,mode=‘r',encoding=’utf-8‘这个码看情况,一般pycharm也就这样了

    新变量名=变量名。read()       这是读就用read 这两个单词还是认识的,写是。。。。

    print(新变量名)

    变量名。close()                 这就是关闭上面的变量

    注意encodin表示编码集,根据文件实际弄,只是我们更多的用utf-8

    rb读取出来的数据事bytes类型,在rb模式下,不能选择encoding字符集

    变量名=open(‘文件名’,mode=‘rb’)

    新变量名=f。read()

    print(新变量名)

    f。closr

    结果就是一堆字节

    rb的作用:读取非文本文件的时候,比如读取mp3.图像。视频等信息的时候用

    绝对路径和相对路径

    1绝对路径:从磁盘的根目录开始一直到文件名。

    2相对路径:同一文件夹下的文件。相对于当前这个程序所在的文件夹而言。如果在同一个文件夹中,则相对路径就是这个文件名,如果在上一层文件夹。则要。。。/

    推荐大家使用相对路径,这样吧程序拷贝给别人的时候,直接把羡慕拷贝走就能运行,如果要绝对路径,就要拷贝外部文件了。

    1.read()将文件中的内容全部读取出来,弊端:占内存,如果文件过大,容易导致内存崩溃。

    2.read(n)这个N写的是几就读前几个字,再读是从n后面开始读,不是从头开始,rb就是读n个字节

    3readline()一次读取一行数据,注意:readline()结尾,注意每次读取出来的数据都会有一个

    所以呢,需要我们使用 strip()方法来去掉 或者空格

    4.readlines()将每一行形成一个元素,放到一个列表中,将所有的内容都读取出来,所以也是容易内存崩

    5.循环读取 这种方式是最好的,每次读取一行内容,不会产生内存溢出的问题。

    变量=open(‘文件名’,mode=‘r',encoding=’utf-8‘)

    for i(可自定名) in 变量:

                      i 循环

    读取完文件句柄一定要关闭

    三  写模式(w,wb)

    写的时候注意,如果没有文件,则会创建文件,如果文件存在则把原文件内容删除,再写入新内容

    变量=open(‘文件名’,mode=‘w',encoding=’utf-8‘)

    变量。write(’想写的‘)

    变量。flush()           养成刷新的好习惯

    变量。close                  关闭也是好习惯

    wb模式下。可以不指定打开文件的编码,但在写文件的时候必须将字符串转化成utf-8的bytes数据

    变量=open(‘文件名“,mode=”wb“)

    变量。write(’想写的”,encoding=“utf-8‘)

    刷新  关闭        不推荐这样反正也要写,还是从头就开始

    四增加(a,ab)

    我们写入的文件会在追加在文件的结尾

    变量=open(‘文件名’,mode=‘a’,‘utf-8’)

    变量。write(“”)

    刷新 关闭

    五 读写模式 r+  r+b

    对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,在读取完了之后再进行写入,我们以后使用频率最高的就是r+

    变量=(‘文件名’,mode=r+,‘utf-8’)

    新变量=变量。read()

    变量。write (‘想写的’)

    print(新变量)        r+模式一定要先读取再写入     这个不管你读几个,写的话永远在最后写,就算修改光标

                                  妈的 r+先写后读也行,就是你写几个光标向后移几个,读的时候按光标走,就算是字符串类型的数字‘1’ utf-8的编码 字节和汉字也不一样,要注意

    六  写读(w+,w+b)

    先将所有内容都清空,然后写入最后读取,但是读取的内容是空,一般不常用,调节光标可以选择读入,挑光标也没用

    七,追加读(a+)

    a+模式下无论先读还是后读都是读取不到数据的

    还有就是把字符换成字节而已,不赘述了

    八,其他相关操作

    seek  光标操作   变量。seek(n) 才可以       n代表的是位置 用的是byte  所以使用utf-8的中要是3的倍数

    seek(0)移动到开头,seek(0,2)移动到结尾     也可以直接加数字移动的是字节

    tell()  变量。tell()       查询光标的位置    这个感觉实在没用

    truncate(n)         这个操作比较多,再组合组合前面的给的操作,读取,光标位置什么的

              这个n是数字,不管怎么切,都是从头切,这个n和光标一样都是移动的字节。

              想要再读取截断后的段落,移动光标为0,否则一直读取原文件,原文件读取完毕也不读取新文件

              截断会截到目标位置或光标位置

    九修改文件

    只能将文件中的内容读取到内存中,将信息修改完毕,将原文件删除,把新文件的名改成老文件

    import os

    with open(‘文件名’,mode=‘r',encoding=‘utf-8’)as f1

      open(‘文件名2’,mode=‘w',encoding=‘utf-8’)as f2:

      变量名=f.read()

      新变量名=变量。replace(‘ ’, “”)

      f2。write(新变量名)

    os。remove(‘文件名’)

    os。rename(‘新变量名‘,一般就是老名——副本,‘文件名’)把新名字改回去          

    这样最大的问题就是一次写太多,内存容易爆炸
    用循环一句一句的就没事了
    import os
    with open(‘文件名’,mode=‘r',encoding=’utf-8')as f1,
          open9(’文件名2‘,mode=’w',encoding=‘utf-8’)as f2:
    for   i  in  f1
    变量=i。replace(‘ ’,‘ ’)
    f2.write(变量)
    os。remove(‘文件名’)
    os。rename(‘文件名2’,”文件名“)
     
     
     
     
     
     
  • 相关阅读:
    SQL清除数据库日志方法
    TFS服务器及服务帐号迁域的处理
    about WBS
    ASP.NET URL Rewrite. URL重写
    查看SQL Server中某数据库下每个表占用的空间大小
    [西安招聘] 微软西安分公司 招聘.NET软件工程师,MOSS开发工程师
    企业微信的数据打通
    常见Post请求与实现
    Python解释器与__pycache__文件夹的生成
    微信开放平台OpenID与UnionID的区别
  • 原文地址:https://www.cnblogs.com/Mrszhao/p/9454859.html
Copyright © 2011-2022 走看看