• 文件操作


    绝对路径:盘符开头并精确到目标文件,例如:f:试用实验.txt

    相对路径:当前目录下的文件,例如:实验.txt

    文件操作

    ps:操作完成后一定要结束操作,使用s.close,避免持续占用内存空间。

    open()     open(“绝对路径或相对路径”,“模式”,“编码格式”)

    r——只读:只是读取文件,不作任何更改。

    s = open("f:试用实验.txt",mode="r",encoding="utf-8")
    q = s.read()
    print(q)
    s.close()

    w——只写:若没有文件就创建文件,然后写入;若已有,那便清空内容重新写入。

    s = open("f:试用实验.txt",mode="w",encoding="utf-8")
    s.write("你好世界")
    s.close()

    a——追加:在已有的文件的内容后面追加新的内容。

    s = open("f:试用实验.txt",mode="a",encoding="utf-8")
    s.write("你好世界")
    s.close()

    操作非文字(图片,视频或其他)类型的文件时用bytes

    rb——用byte数据类型读取文件

    s = open("f:试用实验.txt",mode="rb")
    content = s.read()
    print(content)    #输出的内容按byte类型输出,b’字母还是字母,中文用十六进制表示
    s.close()

    wb——用byte数据类型写入文件

    s = open("f:试用实验.txt",mode="wb")
    s.write("你好世界".encode("utf-8"))  #byte数据类型使用除了Unicode之外的数据类型进行储存
    s.close()

    ab——用byte数据类型追加写入

    s = open("f:试用实验.txt",mode="ab")
    s.write("你好世界".encode("utf-8"))
    s.close()

    双功能:

    r+——读写,先读取文件,然后在文件内容后追加新的内容

    s = open("f:试用实验.txt",mode="r+",encoding="utf-8")
    print(s.read())
    s.write("阿瑞斯")   #在r+模式下,此步骤可不写,运行程序后会表现为只读,不会报错
    s.close()

    如果在r+的模式下,先进行写然后再读取(将上面的中间两行代码互换)运行结果就会成为:输入n个字符就会从头开始覆盖原内容的n个字符(不是插入,也不是一次性删除所有内容然后写入)而读取的是未覆盖的内容,若新的字符将原字符完全覆盖,那么读取内容为空。

    w+——写读,先将原内容清空,然后写入,并且毛都不会读出来,因为之前的操作已经将光标移动到末尾了(不常用)

    用调光标【s.seek(0)括号内为字符索引,若为0便是将光标移到开头】的方法可以读取(详见a+的使用方法的演示代码)

    s = open("f:试用实验.txt",mode="w+",encoding="utf-8")
    s.write("你好世界,nihaoma")
    print(s.read())
    s.close()

    a+——追加读取,先在原有的内容上追加新的内容,然后再读取,毛都读不出来,原因同上,解决方法同上

    s = open("f:试用实验.txt",mode="a+",encoding="utf-8")
    s.write("你好世界")
    s.seek(0)   #将光标移动到内容开头
    print(s.read())
    s.close()

    操作非文字(图片,视频或其他)类型的文件时用bytes

    r+b :使用bytes类型读写 ;w+b;使用bytes类型写读   a+b :使用bytes类型追加读取;

    操作方法详解

    read():读取,读取出来的都是字符,在括号内设定数字几,就可以设定读取多少字符。例如read(3)便是读取文件内容的3个字符

    seek():定光标,按字节,括号内设定多少就是将光标定到那个字节的后面,例如Python3的字符是用Unicode进行储存的,每3个字节代表一个中文字符,若s.seek(3),那么光标将会定到文件内容的第一个中文字符的后面(不同的编码方式,每种字符的字节各不相同,使用前先看好)

    tell():输出光标的位置

    readable():是否可读(返回布尔值True、False)

    readline():一行一行读

    readlines():输出为列表,每一行当成列表中的一个元素,添加到列表中

    truncate():对原文件进行截取,括号内若为5,那便截取原文件的前5个字符,其余清空。

    想打印文件内容可以用for循环:先用open打开文件,然后循环变量(尽量别用这种方式,尤其是在不知道这个文件有多大时;尽量一行一行读)

    为了避免忘记写close关闭文件,使其持续占用内存   或  想要一次性用不同的操作模式(mode)打开多个文件可以使用:

    原代码:s = open(路径,mode,encoding)

    with    open(路径,mode,encoding)     as     变量名(s)      #文件操作完成后自动关闭 

    with    open(路径,mode,encoding)     as     变量名(s) ,with    open(路径,mode,encoding)     as     变量名(f)    #打开多个文件,有缩进

    其他方法见:http://www.cnblogs.com/jin-xin/articles/8183203.html

    文件的修改:

    文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

    方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

    方法一
    import
    os # 调用系统模块 with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f: data=read_f.read() #全部读入内存,如果文件很大,会很卡 data=data.replace('alex','SB') #在内存中完成修改 write_f.write(data) #一次性写入新文件 os.remove('a.txt') #删除原文件 os.rename('.a.txt.swap','a.txt') #将新建的文件重命名为原文件

    方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

    import os
    
    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
        for line in read_f:
            line=line.replace('alex','SB')
            write_f.write(line)
    
    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt') 
    
    方法二
    后人发,先人至。扎实的基础可以更快的铸就高楼大厦!
  • 相关阅读:
    python day1
    Vue与react的择决
    CommonJS规范
    js面向对象的程序设计
    正则匹配所有的a标签
    js-静态、原型、实例属性
    js中参数不对应问题
    sublime常用快捷键
    JSON.parse()和JSON.stringify()
    setAttribute()
  • 原文地址:https://www.cnblogs.com/aries-zhang/p/10353326.html
Copyright © 2020-2023  润新知