• Python 文件操作


    使用os模块操作文件本身

    函数            

    描述

    os.unlink(filePath)

    删除文件

    os.remove(filePath)

    同上

       

    os.rmdir(dirPath)

    删除文件夹,必须要是空文件夹才能删除

    os.removedirs(dirPath)

     同上

    os.rename(oldPath,newPath)

    重命名文件、文件夹。要求2个路径只有文件名部分不同,其余要相同。若目标已存在,会报错。

    os.renames(oldPath,newPath)

    同上

       

    os.mkdir(dirPath)

    创建文件夹。如果文件夹已存在,会报错;如果前面的路径不存在,会报错。

    os.makedirs(dirPath)

    递归创建文件夹。如果前面的路径不存在,会自动创建。

       

    os.listdir(dirPath)

    列出该文件夹下的所有子文件夹,以列表形式返回。只列出子文件夹,不会列出文件、后代文件夹。可用于遍历。

    os.chdir(dirPath)

     切换到指定目录

    os.getcwd()

     获取当前目录(注意是目录)的绝对路径。

    如果之前用chdir()切换了路径,此函数得到的是目标路径。

       

    os.path.getsize(filePath)          

    返回文件大小(字节数)

    os.path.exists(path)

    检测文件|文件夹是否存在,返回bool值。

    这2个方法是path子模块的方法。

    没有新建文件的方法,但可以通过打开文件来新建文件:打开文件时指定打开模式是  文件不存在时自动创建的模式,这样就能新建文件了。

    path均为路径,字符串形式。

    使用os模块实现文件读写

    函数

    描述

    os.open(filePath,mode)              

    打开文件,返回文件描述符(常用fd表示)。常用的mode:

    • os.O_RDONLY: 只读

    • os.O_WRONLY: 只写

    • os.O_RDWR : 读写

    • os.O_APPEND: 追加

    • os.O_CREAT: 新建然后打开

    • os.O_FSYNC : 同步写入

    os.fdopen(fd, [, mode[, bufsize]]);            

    此方法是内置函数open() 的别名。

    mode -- 可选,和 Python 内置的 open()函数的mode参数一样,可以是r,w,a,r+,w+,a+...

    bufsize -- 可选,指定返回的文件对象是否带缓冲:bufsize=0,表示没有带缓冲;bufsize=1,表示该文件对象是行缓冲的;bufsize=正数,表示使用一个指定大小的缓冲冲,单位为byte,但是这个大小不是精确的;bufsize=负数,表示使用一个系统默认大小的缓冲,缺省时使用系统默认大小的缓冲。

    os.read(fd,n)

     fd:文件描述符,n:最多读取的字节数

    返回读取到的字符串

    os.write(fd, bytes)

    写入一个字符串。返回实际写入字符串的长度。

    要以字节、字节数组的形式写入。

    示例:bytes("ok","utf-8")   将字符串转换为字节

    os.lseek(fd, pos, how)

    设置文件指针的当前位置。

    第三个参数是参考点,SEEK_SET 或 0 表示文件头; SEEK_CUR或 1 表示当前位置; os.SEEK_END或2表示文件尾。

    第二个参数制定相对参考点的偏移量

     os.close(fd)

     关闭文件

    写入示例:

    import os
    fd=os.open("1.txt",os.O_RDWR)
    os.write(fd,bytes("hello
    world","utf-8"))
    os.close(fd)

    读取示例:

    import os
    fd=os.open("1.txt",os.O_RDWR)
    bytes=os.read(fd,1024)  #返回的是字节形式
    print(bytes.decode("utf-8"))    #解码,将读取到的字节转换为字符串
    os.close(fd)

    使用python的内置函数实现文件读写

    使用open()函数打开文件,创建文件对象

    f=open(file[, mode])

    mode常用的值:

    模式        描述

    r

    只读。缺省mode时默认为r。以r开头的:指针放在文件头,若文件不存在,会报错。

    rb

    只读,打开二进制文件。

    r+

    读写

    rb+

    读写,打开二进制文件

       

    w

    只写。以w开头的:指针放在文件头,如果文件不存在,会自动创建。

    wb

    只写,打开二进制文件

    w+

    读写

    wb+

    读写,打开二进制文件

       

    a

    追加。以a开头的:指针放在文件尾,如果文件不存在,会自动创建。

    ab

    追加,打开二进制文件

    a+

    追加,可读写。

    ab+

    追加,可读写,打开二进制文件

    写不是先清空原有内容,再写入,而是直接覆盖。

    比如原来的内容是“hello wolrd”,写入一个“ok”,变为“okllo world”。

    写入的内容比原来的长,才会覆盖完。

    file 对象

    使用open()打开文件后,会返回一个file对象,表示文件本身。 file 对象常用的方法:

    函数      描述

    file.flush()

    把内部缓冲区的数据立刻写入文件

    file.close()

     关闭文件

       

    file.read([size])

    读取指定的字节数,缺省size或size为负数时,会读取所有内容。

    如果是文本文件,返回读取的字符串(如果读取到的是空串,说明已到文件尾);如果是二进制文件,返回读取到的字节。

    file.readline()

    读取一行,以字符串(如果读取到的是空串,说明已到文件尾)或字节形式返回。

    file.readlines()

    读取所有行,以字符串列表或字节列表形式返回。

       

    file.write(str)

     写入一个字符串,返回实际写入的字符数(注意是字符数)

    file.writelines(list|tuple)        

    写入一个字符串列表|元组,元素必须是字符串。

    写完一个元素后,会在后面接着写,不会自动换行。如果要换行,需要自己加" "

       

    file.tell()

    返回文件指针的当前位置(从文件头开始的字节数)

    file.seek(offset[, whence])    

    设置文件指针的当前位置。

    offset表示偏移量,int型,默认以字符为单位。

    whence表示参考点,有3个可用的值:

    0   文件头

    1   当前位置(默认)

    2    文件尾

    读|写的时候,文件指针会自动后移。

    如果以文本文件的方式打开(不带b),则读取时返回字符串|字符串列表,写入时只能写入字符串。

    如果以二进制的形式打开(带b),则读取时返回字节,写入时可以写入任何类型(底层都是字节)。

    读取示例:

    f=open("1.txt","r+")
    #str=f.read(1024)  #读指定的字节数
    #str=f.readline()  #读一行
    str=f.readlines()  #全读完,作为列表返回,一行一个元素
    print(str)
    f.close()

    写入示例:

    f=open("1.txt","r+")
    f.write("hello")   #从头开始覆盖(不是先清空原有内容,再写入,是直接从头开始写,可能覆盖不完)
    f.close()

     

     

    pickle 模块

    pickle模块可以实现数据的序列化和反序列化。

    1、序列化:将数据存储到文件中

    pickle.dump(对象|变量|值, 文件对象)
    import pickle
    file=open("1.txt","wb")
    str="hello"
    list=[1,2,3]
    pickle.dump("ok",file)  
    pickle.dump(str,file)  #可同时序列化多个数据
    pickle.dump(1,file)  #需要以二进制形式打开文件。以文本文件形式打开,只能写入字符串类型,不能写入其他类型。
    pickle.dump(list,file)
    file.close()

    2、反序列化:从文件中读取数据,将数据还原

    x = pickle.load(文件对象)
     
    import pickle
    file=open("1.txt","rb")   #如果只有字符串,可以以文本文件形式打开;如果有其他类型的,就必须以二进制形式打开,否则反序列化会出错
    a=pickle.load(file)  
    b=pickle.load(file)
    c=pickle.load(file)
    d=pickle.load(file)
    print(a,b,c,d)    #ok hello 1 [1, 2, 3]   反序列化的顺序和序列化的顺序一致
    file.close()
    
    
     
  • 相关阅读:
    低落
    栗子
    Wireless Password HDU
    考研路茫茫——单词情结 HDU
    DNA Sequence POJ
    HDU 6138 Fleet of the Eternal Throne 多校#8 AC自动机
    Rikka with Candies HDU
    Wavel Sequence HDU
    Counting Divisors HDU
    Codeforces Round #424 E. Cards Sorting 线段树/数据结构瞎搞/模拟
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11298029.html
Copyright © 2020-2023  润新知