• python的文件操作与目录操作os模块


    1.file文件

      File对象做大部分的文件操作。操作的对象是文件,不仅仅是txt文件。以下以txt文件为例。

    2.文件的打开与关闭

        打开文件函数:open(它是一个内置函数,可以直接调用)

        语法:file object = open(filename[,access_mode,encoding])  --创建file对象

       参数含义:filename---包含了你要访问的文件名称的字符串值。

                         access_mode----决定了文件的打开方式:只读、写入、追加等。这个参数是非强制的,默认是只读(r)。

                        encoding--指定文件的打开方式,默认是平台的编码方式(windows下是gbk格式)

       文件操作模式:

    模式

    描述

    r

    只读方式打开。文件的指针将会放在文件的开头。这是默认模式。

    rb

    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

    r+

    打开一个文件用于读写。文件指针将会放在文件的开头。

    rb+

    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

    w

    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    wb

    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    w+

    打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件

    wb+

    以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    a

    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    ab

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    a+

    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    ab+

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

      注:ctrl+b:查看内置函数的源码

       创建文件的时候不要再pycharm内部创建,因为文件格式是gbk格式。文件格式要求是utf-8.

    3.文件的读写追加操作

     1)read()方法:一下子读取所有的数据。

    1. read(count)方法从一个打开的文件中读取一个字符串
    2. 里面传递你要读取的字节数
    3. 如果不传递,默认读取所有的数据
    4. 读完了之后,指针会定位到读完之后的位置

      语法:file.read() -------当输入默认值后,再读文件内容则什么都不输出

     

    实例:

    #文件的打开-- # 在python当中“”表示转义字符,如果要写文件路径的话,就在路径前面加字符r,或者写为“\” file = open(r"E:pythonpython_APIfile1.txt",encoding="utf-8") print(file.read()) ------文件中原有格式什么样子,输出就是什么样子 结果: a=1 b=2 c=3 d=4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbb ccccccc

     

    在读取之后的基础上,再次输出内容。如下结果,可以看到,再次输出内容时,未打印任何信息。是因为在输出文件所有数据后,指针指向文件末尾,因此再次输出时文件后并未任何内容,即为空。

    实例:

    file = open(r"E:pythonpython_APIfile1.txt",encoding="utf-8") print(file.read()) print("===========") print(file.read()) 结果: a=1 b=2 c=3 d=4 aaaaaaaaaaaaaaaa bbbbbbbbbbbbb ccccccc ===========

     

    2)readline()方法:

         读取单独的一行会从文件中读取单独的一行。换行符为 ' 'f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。

      语法:file.readline()

    实例:

    file = open(r"E:pythonpython_APIfile1.txt",encoding="utf-8") line = file.readline() --返回第一行数据 print(line) line2 = file.readline() --返回第二行数据 print(line2) 结果: a=1 b=2

    3)readlines()方法:按行读取

         按行读取:返回该文件中包含的所有行并以list列表的形式输出

      语法:str = file.readlines()

        相当于迭代一个文件然后按行读取:

                for line in f:

                    print(line, end='''')

    实例:

    file = open(r"E:pythonpython_APIfile1.txt",encoding="utf-8") lines = file.readlines() ---返回的是列表list类型 print(lines) 结果: ['a=1 ', 'b=2 ', 'c=3 ', 'd=4 ', ' ', 'aaaaaaaaaaaaaaaa ', ' ', 'bbbbbbbbbbbbb ', 'ccccccc ']

    4)write()方法:只有一个人在修改,占用资源。修改过程中其他人不能修改。

          可将任何字符串写入一个打开的文件。

          注:write()方法不会在字符串的结尾添加换行符(‘ ’),所以无法实现自动换行。

      语法:f.write()

    实例:

    file = open(r"E:pythonpython_APIfile1.txt","w",encoding="utf-8") file.write("写入数据 ") file.write("再次写入数据")
    file.close() 结果: ----打开文件查看数据,原数据被替换。文件中数据为:
    写入数据
    再次写入数据 ----因为是打开后的两次操作。如果关闭文件重新打开再次写入之前的数据就没有了

    5)writelines():

          里面传入你要写的列表内容,就可以写入多行。

          注:write()方法不会在字符串的结尾添加换行符(‘ ’),所以无法实现自动换行。

      语法:file.writelines([“”,””,””,.....])

    file = open(r"E:pythonpython_APIfile1.txt","w",encoding="utf-8")
    file.writelines(["写入数据
    ","再次写入数据","第三行数据内容"])
    file.close()
    
    结果:
    写入数据
    再次写入数据第三行数据内容

    6)追加,在上述实例的模式中追加一句"hahahhahahhaha"。

    实例:

    file = open(r"E:pythonpython_APIfile1.txt","a+",encoding="utf-8") file.write("hahahhahahhaha") file.close() 结果: 写入数据 再次写入数据第三行数据内容hahahhahahhaha

    4.文件的定位

    1)tell()

        输出文件内的当前位置(指针的位置);换句话说,文字会写在上次文字结尾后面

    2)seek(offset[,from])

     改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

        from参数----0:参考位置为文件开头

                           1:参考位置设置为当前所在位置

                           2:参考位置设为文件结尾

    实例:

    file = open(r"E:pythonpython_APIfile1.txt","a+",encoding="utf-8") file.write("hahahhahahhaha") num = file.tell() print(num) print(file.read()) file.seek(0,0) ---移动文件位置为文件开头 print(file.read()) file.close() 结果: 81 --此时指针在文件末尾,输出为空 写入数据 再次写入数据第三行数据内容hahahhahahhahahahahhahahhaha

    5.文件对象的属性

      一个文件被打开后,有一个file对象,可以得到有关该文件的各种信息。

      以下是和file对象相关的常用属性列表

    属性

    描述

    file.closed

    返回true,如果文件已经关闭,否则返回false

    file.mode

    返回被打开文件的访问模式

    file.name

    返回文件的名称

    file.softspace

    如果用print输出后,必须跟一个空格符,则返回false。否则返回true。(python3已去除)

    实例:

    file = open(r"E:pythonpython_APIfile1.txt","r",encoding="utf-8") print("文件的访问模式",file.mode) print("文件名称",file.name) print("是否已经关闭",file.closed) file.close() 结果: 文件的访问模式 r 文件名称 E:柠檬班pythonpython_APIfile1.txt 是否已经关闭 False

    6.文件操作中应该写try...except..finally

    方式一:
    
    try:
    
      file = open(“some_file”,”w”)
    
      file.write(“Hello”)
    
    finally:
    
      file.close()
    
    方式二:自动关闭
    
    with open(“some_file”,”w”) as opened_file:
    
      opened_file.write(“Hello”)

    上下文管理器(with...as...)与withhttp://www.cnblogs.com/vamei/archive/2012/11/23/2772445.html

     

    7.os模块中常用的方法

     1)os模块概述

           os 模块提供了非常丰富的方法用来处理文件和目录

     2)python引入os模块:import os

     3)常用的方法

        (1)os.name:输出字符串指示正在使用的平台Windows用“nt”表示,linux/Unix用“posix”表示

    import os
    
    print(os.name)
    
    结果:nt

     

     (2)os.getcwd():得到当前的工作目录,即当前python脚本工作的目录路径

     

    import os
    
    print(os.getcwd())
    
    结果:E:pythonpython_API

     

        (3)os.listdir(path):返回指定目录下的所有文件和目录名。若为空,代表python当前目录下。返回的是列表类型

    import os
    
    #获取当前目录下的所有文件夹和文件
    print(os.listdir())
    
    #指定某个目录,获取指定目录下的文件夹和文件
    print(os.listdir(r"E:ubuntu"))
    
    结果:
    ['.idea', '1.py', 're_lianxi.py', 'test_ddt_lianxi.py', '__pycache__']
    ['Ubuntu 64 位.nvram', 'vmware-2.log', 'vmware.log']

        (4)os.mkdir(path):创建一个目录,且之前的目录必须是已存在的。若该创建的目录已存在,则再次创建会报错。

     

    import os
    
    #直接写,则在python当前目录下创建一个test文件夹(相对路径)
    print(os.mkdir("test"))
    
    #写绝对路径,则在指定的目录下创建(目录aaa是存在的)
    print(os.mkdir(r"F:aaa	est"))
    
    #写绝对路径,则在指定的目录下创建(目录bbb不存在)
    print(os.mkdir(r"F:bb	est"))
    
    结果:
    
    None         --创建成功,该函数无返回值,则返回值为None,是正常的
    None
    Traceback (most recent call last):
      File "E:/python/python_API/2.py", line 14, in <module>
        print(os.mkdir(r"F:bb	est"))
    FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'F:\bbb\test'

     

       (5)os.remove():删除一个文件不能删除文件夹

     

    os.remove(r"E:python1.txt")

     

       (6)os.rmdir():删除一个目录,只能删除空目录.如果删除的目录不存在,则会报错。

                若要删除目录包含所有文件,需要引入shutil模块,shutil.rmtree()

    import os
    os.rmdir(r"E:python est2")--------删除空目录
    import shutil shutil.rmtree(
    "E:python est4")------删除目录

       (7)os.makedirs(path):创建一系列目录,目录路径之前文件夹不存在也可,会立即创建

     

    os.makedirs(r"E:python	est6	est1")

     

       (8)os.environ.get(“path”):获取环境变量值

     

    print(os.environ.get("path"))

     

       (9)os.system(command):运行系统命令,返回的是0或者1。不会返回控制台输出结果。

                 注:想获取控制台输出内容,导入subprocess模块

     

    print(os.system("cd /"))
    
    结果:0


     

       (10)os.chdir():改变当前工作路径到指定路径

    import os
    
    
    print("修改前的路径:",os.getcwd())
    
    path = "E:柠檬班"
    #修改当前目录路径
    os.chdir(path)
    print("修改后的路径:",os.getcwd())

         (11) os.path模块:主要处理文件路径相关的

            1*。os.path.join(path,name):连接目录与文件名或目录

    #连接目录和文件名
    print
    (os.path.join(r"E:python est6",r"test1.txt")) 输出:E:柠檬班python est6 est1.txt
    #连接目录和目录
    print(os.path.join(r"E:python est5",r"testaaa")) 输出:E:柠檬班python est5 estaaa

     

           2*。os.path.isifle()和os.path.isdir():分别检验给出的路径是一个文件还是目录

    #检验路径是目录,则返回true
    print(os.path.isdir(r"E:python"))
    结果:True
    
    #检验路径是文件,则返回true
    print(os.path.isfile(r"E:python1.txt"))
    结果:True

           3*。os.path.exists():检验给出的路径是否真实存在

     

    print(os.path.exists("E:python	est4"))
    
    结果:False

     

          4*。os.path.split(路径):返回一个路径的路径名或者文件名

       场景:在A电脑上文件:D:python1file.txt,并在同级py目录下有个python来操作此文件。将其拷贝到电脑B上(脚本一并拷贝),电脑B的路径为F:python3aaafile.txt

    #将路径分为两部分
    print(os.path.split(r"E:python	est6"))
    
    结果:('E:\柠檬班\python', 'test6')
    
    
    #获取文件或者目录的路径
    print(os.path.split(r"E:python	est6")[0])
    
    结果:E:柠檬班python
    
    
    #从目录中提取文件名或者路径名
    print(os.path.split(r"E:python	est6")[-1])
    
    结果:test6

          5*。os.path.splitext(路径):分离文件名与扩展名

     

    print(os.path.splitext(r"E:python1.txt"))
    
    结果:('E:\柠檬班\python\1', '.txt')

     

          6*。os.path.dirname(path):返回文件路径

     

    print(os.path.dirname(r"E:python1.txt"))
    
    结果:E:柠檬班python

          7*。os.path.basename(path):返回文件名

     

    print(os.path.basename(r"E:python1.txt"))
    
    结果:1.txt

     

          8*。os.path.getsize(name):获得文件大小,如果name是目录返回0L

    #获取文件的大小
    print(os.path.getsize(r"E:python1.txt"))
    
    结果:78(单位:字节)
    
    
    #给定一个目录的路径,获取大小
    print(os.path.getsize(r"E:pythonpython_APIfile"))
    
    结果:0

          9*。os.path.abspath():返回path规范后的绝对路径

    print(os.path.abspath(__file__))      -----中,(__file__)表示当前文件
    
    结果:E:
    equests_API_1Commondir_config.py
    
    

      练习题:补充缺失的代码:用代码实现以下中文内容

     def print_directory_contents(sPath):

     '''

        这个函数接收文件夹的路径作为入参函数,

        返回该文件夹中文件的路径,

        以及其包含文件夹中文件的路径。

    '''

    import os
    
    list_1 = []
    def print_dictory_contents(sPath):
        if os.path.isdir(sPath):
            for item in os.listdir(sPath):
                filepath = os.path.join(sPath,item)
                if os.path.isdir(filepath):
                    print_dictory_contents(filepath) #----迭代函数
                elif os.path.isfile(filepath):
                    list_1.append(filepath)
        return list_1,len(list_1)
    
    list_dir,lentgh = print_dictory_contents(r"E:ubuntu")
    print(list_dir,lentgh)

    练习题2:判断一个路径是否存在,如果不存在,则创建目录。 创建完成之后,在该目录下面创建一个txt文件,将个人信息写入进去。

    import os
    #函数的定义
    
    def write_personInfo(dir_path,person_info):
        if os.path.exists(dir_path) == False:
            os.makedirs(dir_path)
        if os.path.isdir(dir_path):
            os.chdir(dir_path)
            with open("xiaojian_personInfo.txt","w") as fs:
                fs.write(person_info)

    #函数的调用
    person_info= '''age:29
    height:155
    weight:94
    city:changsha
    career:software testing engineer
    Hobbies:drinking coffee,listening music,watching TV,shopping online,playing badmiton
    character:lively,optimistic
    signature:Lucky if got ,destined if lost
    '''
    path = "D:\Pycharm-workspace\python2期\作业参考答案\我的个人信息"
    write_personInfo(path,person_info)
  • 相关阅读:
    IDEA 2017 安装和破解
    Linux新增开放端口
    ping指定IP的指定端口号
    Ubuntu防火墙常用命令
    Ubuntu端口常用命令
    File Zilla连接Ubuntu 失败
    Docker常用命令详解
    Linux的vi常用命令详解
    Qt事件系统之二:鼠标事件和滚轮事件
    Qt事件系统之一:Qt中的事件处理与传递
  • 原文地址:https://www.cnblogs.com/xiaoxiaolvdou/p/9461700.html
Copyright © 2020-2023  润新知