zoukankan      html  css  js  c++  java
  • 文件操作

    1.文件操作的函数

    open(文件名(路径), mode="?", encoding="字符集")
    模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b
    r w a r+ b
    文件路径:
    1. 绝对路径,从磁盘的根目录寻找 或者 从互联网上寻找一个路径
     2. 相对路径(用的多). 相对于当前程序所在的文件夹   ../返回上一层文件夹
    f = open("哈哈哈哈哈", mode="r", encoding="UTF-8")
    s = f.read()#如果在read()中加上数字表示读取几个字符
    print(s)
    f.close() # f.close(),每次执行完之后必须close, 否则在下面的程序中如果删除这个文件. 就会报错
     这样读的弊端会占用大量的内存,如果文件过大的话会导致内训崩溃.
     循环读取. 这种⽅式是最好的. 每次读取一行内容.不会产生内存溢出的问题.  
    f = open("../def/哇擦.txt", mode="r", encoding="utf-8")

    for line in f:
    print(line.strip())
    f.close

    read(n) 读取n个字符. 需要注意的是. 如果再次读取. 那么会在当前位置继续去读,而不
    是从头读, 如果使用的是rb模式. 则读取出来的是n个字节.

    readline() ⼀次读取⼀行数据, 注意: readline()结尾, 注意每次读取出来的数据都会有一
    个\n 所以呢. 需要我们使用strip()方法来去掉\n或者空格

    readlines将每一行形成一个元素,放到一个列表中,饭后将所有内容都读出来,所以也容易出现内存崩溃的问题。

    f=open("文件名",mode="r",encoding="utf-8")
    lst= f.readlines()
    print(lst)
    for el in lst:
        print(el.strip())

    rb.读取出来的数据是bytes类型, 在rb模式下. 不能选择encoding字符集. 它是 读取非文本文件,比如mp3,视频,图片等

    写文件:

    带w的. 只要你操作了. 就会清空源文件,
    # 如果文件不存在. 会自动创建文件
    f = open("小娃娃", mode="w", encoding="utf-8")
    f.write("金毛狮王")
    f.flush() # 刷新. 养成好习惯
    f.close()
    
    
    wb模式下. 可以不指定打开文件的编码. 但是在写文件的时候必须将字符串转化成utf-8的 bytes数据
    f = open("小娃娃", mode="wb")
    f.write("金毛狮王".encode("utf-8"))
    f.flush()
    f.close()

    追加(a, ab)
    在追加模式下. 我们写入的内容会追加在文件的结尾

    f = open("小娃娃", mode="a", encoding="utf-8")
    f.write("麻花藤的最爱")
    f.flush()
    f.close()
    读写模式(r+, r+b)
    对于读写模式. 必须是先读. 因为默认光标是在开头的. 准备读取的. 当读完了之后再进行
    写入.
    f = open("小娃娃", mode="r+", encoding="utf-8") content = f.read() f.write("麻花藤的最爱") print(content) f.flush() f.close() 结果: 正常的读取之后, 写在结尾
    r+模式下. 必须是先读取. 然后再写入
    写读(w+, w+b)
    先将所有的内容清空. 然后写入. 最后读取. 但是读取的内容是空的, 不常用
    f = open("小娃娃", mode="w+", encoding="utf-8")
    f.write("哈哈")
    content = f.read()
    print(content)
    f.flush()
    f.close()

    a+  (追加)模式下, 不论先读还是后读. 都是读取不到数据的

    相关操作

    seek(n) 光标移动到n位置, 注意, 移动的单位是byte. 所以如果是UTF-8的中文部分要

    是3的倍数.
    通常我们使用seek都是移动到开头或者结尾.
    移动到开头: seek(0)
    移动到结尾: seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移, 默认是0, 表
    示开头, 1表示当前位置, 2表示结尾

    f = open("hello", mode="r", encoding="utf-8")
    # f.seek(3) # 3byte => 1中文
    # s = f.read(1) # 读取一个字符
    # print(f.tell()) # 表示光标在哪儿
    # f.close()
    
    # seek(偏移量, 位置)
    # seek(0) # 开头
    # seek(0,2) # 在末尾的偏移量是0 末尾

     truncate()截断文件

    f = open("小娃娃", mode="w", encoding="utf-8")
    f.write("哈哈") # 写入两个字符
    f.seek(3) # 光标移动到3, 也就是两个字中间
    f.truncate() # 删掉光标后面的所有内容
    f.close()
    f = open("小娃娃", mode="r+", encoding="utf-8")
    content = f.read(3) # 读取9个字符
    f.seek(4)
    print(f.tell())
    f.truncate() # 后面的所有内容全部都删掉
    # print(content)
    f.flush()
    f.close()

    注意:在r+模式下,如果读取了内容,不论读了多少,光标显示多少,接着写入或者读取都是在末尾进行的。如果想进行截断操作,先把光标挪取到你要截断的部分,然后在进行截断。

      文件修改:将文件中的内容读取到内存中,把需要改的信息修改完毕,然后将源文件删除,将新的文件改成旧的文件名。

    import os
    with open("小娃娃", mode="r", encoding="utf-8") as f1,\
        open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
       for line in f1:
        new_line = line.replace("大白梨", "冰糖葫芦")
        f2.write(new_line)
    os.remove("小娃娃") # 删除源⽂文件
    os.rename("小娃娃_new", "小娃娃") # 重命名新文件

     ##############################内容补充#############################

    1.文件缓冲区

    open函数中的第三个参数是可选的buffering控制文件的缓冲,如果参数是0的话,表示没有缓冲,直接将参数写到硬盘上;  如果参数是1的话,操作是有缓冲的,先写到内存中,只有使用flush函数或者使用close函数的时候,才会将数据更新到硬盘中,如果参数大于1的话,则代表缓冲区的大小(单位是字节),-1(或者任意负数,)代表使用默认缓冲区的大小.

    2.操作文件和目录

     在Python中对文件和目录的操作,常用os模块和shutil

     获取当前脚本工作的目录路径:os.getcwd()

     返回指定目录下的所有文件和目录名:os.listdir()     os.listdir("c:\\")

     删除一个文件:os.remove(filepath)

     删除多个空目录:os.removedirs(r'd:]python')

     检测给出的路径是否是一个文件:os.path.isfile(filepath)

     检测给出的路径是否是一个目录:os.path.isdir(filepath)

     判断是否数绝对路径:os.path,isabs()

     检测路径是否存在os.path.exists(),     检测D盘下是否有Python文件夹 os.path.exists(r"d:\python")

     分离一个路径的目录名和文件名 os.path.split()

     获取路径名:os.pathdirname(filepath)

     获取文件名:os.path.basename(filepath)

     读取和设置环境变量:os.getenv()和os.putenv()

     当前平台使用的行终止符:os.linesep,Windows使用的是'\r\n',Linux使用的是\n,Mac使用\r

     重命名文件或者目录os.rename(old  new)

     创建多级目录:os.makedirs(r"d:\python\text")

     创建单个目录:os.makdir('text')

     获取文件属性:os.stat(file)

     修改文件的权限和时间戳:os.chmod(file)

     获取文件的大小:os.path.getsize(filename)

     复制文件夹:shutil.copytree("olddir","newfdir")  olddir个newdir只能是文件,且newdir不能存在

     复制文件:shutil.copyfile("oldfile","newfile")  oldfile只能是文件,newfile可以是文件,也可以是目标目录

     移动文件(目录):shutil.move("oldpos","newpos")

     删除目录:os.rmdir('dir')只能删除空目录,shutil.rmtree("dir"),可以将空目录的和有内容的目录都能删除.

     
     


  • 相关阅读:
    ASP.NET动态加载用户控件的页面生成过程
    简单的flash与asp.net通信(LoadVars类)
    转 推荐两本FLASH RIA应用开发方面的书籍
    关于代码加密解密保护
    转 利用 SharpZipLib方便地压缩和解压缩文件
    在C#中应用哈希表(Hashtable)
    C#中解析并运行一个本地命令行
    About Windows Live Writer
    安装sql server 2008,提示要删除SQL Server 2005 Express 工具,可我根本没装
    [转] C#中的null
  • 原文地址:https://www.cnblogs.com/wqzn/p/9439733.html
Copyright © 2011-2022 走看看