Python之文件操作及常用函数

时间:2021-09-21 09:59:28

常见全局函数:

1.dir(nameStr):

常见系统变量:

1.sys.path:一个包含Python自动搜索文件的路径或目录的列表。可使用列表的操作方法修改、增加默认搜索路径。

一、模块

  1.创建模块:创建一个扩展名为.py的文件就相当于创建了一个模块,文件名即为模块名,文件中的内容即为模块所包含的内容。

  2.导入模块:import 模块名

  3.使用模块:模块名.变量名(可为普通变量或函数或类等)

  4.导入模块中的某个元素:from 模块名 import  变量。(可多级导入)

  5.导入模块中的所有元素:from 模块名 import *

注:2和4、5的区别:使用2方式时,引用模块中的元素需要使用“模块名.变量名”的形式,而4、5可直接使用变量名。

二、包

  1.创建包:

    (1)新建一个文件夹,文件夹名即为包名

    (2)在文件夹(包)中创建一个__init__.py文件。(这一步是必须的,不然构不成一个包,注意:init前后各两个下划线)

    (3)在文件夹中添加想包含在包中的模块。

    (4)在__init__.py中导入这些模块或模块中的元素。

  2.导入包:import 包名。

  3.使用包:同模块使用方法一样。

  4.from 包名 import *的使用:

三、文件操作

  1.常用全局内置函数(直接可用的函数,无需引用其他模块)

    (1)open(file,op):打开指定文件file,若文件不存在则创建。其中file为文件名,file的路径默认为程序所在的位置,也可指定file的路径。

      参数op:(1)“r”或无:若省略参数op,则只是简单打开文件,若文件不存在则会报错,写文件操作也会报错;

          (2)“w”:打开并可写文件。若文件已存在,则以前的内容将被清除。

          (3)“a”:向文件中追加文本。向已存在的文件中追加内容。

                                        如没有参数“w”则只是简单打开文件,如文件不存在则会报错。    如:a = open("test.txt","w"),a为test.txt的一个文件对象

    注:使用open函数打开并写文件时文件时,就算文件存在,Python也会先删除原有文件然后创建新文件,也即文件的内容也随之删除!

  2.文件操作函数(需要指定文件对象)

    (1)write(astring):向文件中写内容,写入的内容不会自动换行,但可使用换行符“\n”。如:a.write("one line"),此时文件test.txt中出现内容“one line”。

    (2)close():关闭文件对象。对一个文件的操作结束是调用。如:a.close()。

    (3)readline():从文本中读取一行文本,该函数返回一行的文本字符串,包括换行符“\n”。第一次使用返回文件的第一行文本,第二次返回第二行文本,依此类推。

             使用循环可遍历文件中的每一行文本。 如:line1 = a.readline() ->返回a对象所指文件的第一行文本。

    (4)read():返回文件中剩余的文本组成的多行字符串,若打开文件时调用则返回文件中的所有内容(即使用read()之前没有使用readline())。

    (5)readlines():返回由文件中剩余的文本(行)组成的列表,  遍历返回的列表即可得到每一行的内容。如:

              假设一个文本test.txt中包含2行内容:one   two

              a = open("test.txt"),lines = a.readlines(),print(lines)->["one\n","two\n"]

              for line in lines:#遍历文本

                print(line,len(line)) ->"one\n",4 注:换行符“\n”也包含在长度内,即比实际内容的长度多1

                          ->"two\n",4

  3.os模块常用函数:文件路径相关(使用前要导入os模块:import os)

   (1)os.path:与路径有关的模块,包含了路径操作相关的函数。由于路径也是一个字符串,因此,操作路径和操作字符串是一样的。

    1)os.path.isfile(filepath):检查路径是不是指向一个文件(注:不是指文件夹)。返回TRUE or FALSE。

      2)os.path.join(dir1,dir2):将目录名组合成路径。如:os.path.join("d","test") ->d\test.(不同系统下输出不完全一致)

    3)os.path.split(filepath):将路径filepath的最后一个组件(即目录名或文件名)提取出来。该函数返回包含两个项的元组(或两个值):

                   (最后一个组件的)父目录路径和最后一个组件。如:os.path.split("c:\\python\\test")->("c:\\python","test")。

      注:利用此函数可以用递归的方法将一个路径完全分解为目录名:

          def split_fully(path):

            parent,name = os.path.split(path)

            if name == “”: #当一个路径不能再被分解时,第二个值就会返回空字符串

              return (parent,) #返回一个元组

            else

              return split_fully(parent) +(name,)

          调用:split_fully("D:\\a\\b\\c") ->("D:\\","a","b","c")

    4)os.path.splitext(filename):将一个文件的名称和扩展名分开(即分离扩展名,从而判断文件类型)。

      如:s = os.path.splitext("test.txt")->s = ("test",".txt"),s[1]->可获得文件扩展名,若s[1]为空字符串,则为文件夹。

    5)os.path.normpath(path):规范或“清理“路径。如:os.path.normpath("c:\\a\\b\\t\\..\\c") ->"c:\a\b\c","清理"了”t\\..“ 。

    6)os.path.abspath(filename):将相对路径转化为绝对路径。函数不会检查路径是否存在。

    7)os.path.exists(path):检查某个路径是否存在,返回True or False。

    8)os.path.isdir(filepath):检查路径是不是指向一个目录(即文件夹)。同isfile对应。

    9)os.path.getsize(filepath):在不必打开或扫描某个文件(不是指文件夹)的情况下以字节为单位返回该文件的大小。

      注:1.若路径指向的是文件夹(即目录),则返回0;2.若传入的文件或路径不存在则报WindowsError错误。

    10)os.path.getmtime(filepath):获得文件上次被修改的时间。返回的值是从1970年到上次修改时间之间的秒数。

      注:可用函数time.ctime(seconds)将秒数转化为日期时间格式,在使用该函数前记得导入time模块:import time

   (2)os.listdir(path):返回一个目录下所有名称条目,包括文件和子目录等内容。若目录路径不存在则报WindowsError错误。

      注:1.返回的条目只是一个名称,没有包含路径,可以用os.path.join(path,条目名)得到相应条目的路径。

        2.可对返回的条目进行排序(其实就是列表排序):sorted(os.listdir(path)),默认排序规则:数字->大写字母->小写字母

   (3)os.chmod:文件权限相关的模块

  4.shutil模块常用函数:文件重命名、移动、复制、删除(使用前先导入shutil模块:import shutil)

   (1)shutil.move(src,dest):重命名或移动文件(而不是移动目录(即文件夹))。

      注:1)dest所指向的是一个文件,则为重命名;若指向的是一个目录(即文件夹)则为移动文件。

        2)src必须指向一个存在的文件,否则不会报错。重命名后的文件可为任意命名,甚至文件可不带后缀。

        3)os.rename(src,dest)也具有重命名和移动文件的功能,但不常用。

   (2)shutil.copy(src,dest):复制文件。可重新命名新文件。

   (3)删除文件:os.remove(file)。注:此方法不是shutil模块的方法。

四、目录操作:创建和删除目录(此处的目录可理解为Windows下的文件夹)

  1.os.mkdir(dir):创建目录,要创建的目录的父目录必须存在。

  2.os.makedirs(dir):创建目录,要创建的目录的父目录可不存在。若父目录不存在则创建父目录。<简单粗暴>

  3.os.rmdir(dir):删除目录,仅对空目录有效。若目录中文件则不能删除。

  4.shutil.rmtree(dir):删除目录,目录可不为空。【此函数慎用!】

 

五、通配

  1.含义:在指定目录中找出满足要求的文件  

  2.模块:glob

  3.通配函数:glob.glob(pattern),该函数接受一个模式作为参数,返回所有匹配的文件名和路径名列表。

    注:由于返回的文件包含路径,可以使用函数os.path.split(file)将路径和文件分离。

  4.常见通配符:

    (1)*:匹配0个或多个任意字符。如:m*(匹配所有以字符m开头的文件),*.m*(匹配所有后缀名以字符m开头的文件)。

    (2)?:匹配任意单个字符。如:???.txt(匹配恰好包含3个字符的文件.txt文件)。

    (3)[...]:匹配方括号中列出的任意一个字符。如:[abc]*(匹配以字符a或b或c开头的文件)。

    (4)[!...]:匹配不在方括号中列出的任意一个字符。如:*[!s](匹配文件名不以字符s结尾的文件)。

      注:方括号中也可使用表示某个范围的字符。如:[m-p](匹配m,n,o,p中任意一个字母);[!0-9](匹配非数字字符)

  5.区分大小写:通配一般是区分大小写的,如M*和m*匹配的内容是不同的。但在Windows下通配是不区分大小写的。

  6.glob.glob(dir)和os.listdir(dir)

    (1)os.listdir:列出指定目录下包含的文件,但不包括文件的路径,即返回的是相对路径。

    (2)glob.glob:可返回多个目录下满足匹配要求的文件,因为可在目录或子目录中指定通配符。

            如:glob.glob("*\\*.txt"):返回当前目录的所有子目录中扩展名为.txt的文件。

六、文件异常(IOError)

 

七、os中的异常(OSError)