• Python语言和标准库(第四章:文件与目录)


    本章介绍python中用来读写文件以及访问目录内容的函数和类型。python提供了丰富的输入输出函数,本章将介绍其中使用广泛的那些函数,首先介绍文件对象,它是python中实现输入输出的基本方法,之后将介绍用于操作路径,获取文件信息和访问目录内容的函数。

    3.1文件对象

    在windows路径名称中,必须在路径中队反斜杠转义,即每次用两个反斜杠,例如,路径C:windows emp,用python字符串C:\windows\temp,或者放置一个r取消字符串中队反斜杠的特殊处理,r"C:windows emp".

    3.1.1编写文本文件

    下面从创建简单的文本文件开始,创建一个file对象告诉p希望向文件中写数据,file对象代表对一个文件的链接,而不是问价那本身,但是如果试图打开或者像一个不存在的文件写数据,python将自动创建该文件。

    >>>def make_text_file():
            a= open('text.txt',"w")
            a.write("this is how you create a new text file")
            a.close()

    可以从创建一个make-text-file()函数开始,告诉python开打一个名为test.txt的文件。由于python找不到该文件,就会自己创建,注意:如果该文件存在,python会删除它并创建一个新文件,后面将需欸写如何在创建一个文件之前检查它是否已经存在。

    下面我们创建一个程序,首先检查某个文件是否已经存在,如果存在返回一个错误消息。

    >>>import os
    >>>def make_another_file():
        if  os.path.isfile('test.txt'):
            print("you are trying to create a file that already exists!")
        else:
            f= open("test.txt","w")
            f.write("this is how you create a new text file")
    ...
    >>>make_another_file()
    "you are trying to create a file that already exists!"

    打开文件时,利用本章讨论的其他文件处理函数,可以制定一个相对路径或者一个绝对路径。

    3.1.2向文本里追加文本

    向文件中追加文本很容易实现,追加文本不是用参数“w”来实现的了,而是有追加参数“a”。这样可以保证文件中已有的数据不被重写,而是将新文本追加到文件末尾,尝试下面的代码:

    >>>def add_some_text():
            a = open ('test.txt',"a")
            a.write("here is some additional text!")
    ...
    >>>add_some_text()

     在此注意的是,write函数是不会自动换行的,所以我要使用转义序列 。

    3.1.3度文本文件

    读文件是类似的,首先,通过创建一个file对象打开文件,这一次,使用“r”告诉python打算读文件,“r”是默认参数,可以省略。

        a = open("text.txt","r")

    可以使用readline方法从文件中读出一行文本

     >>>a.readline()
    "blablablabla..."

    还可以使用read方法一次性读取文件中剩余内容,该方法返回文件中未读取的所有内容。

    >>>f= open("test.txt","r")
    >>>text=a.read()
    >>>peint(text)
    this is how much i love you
    forever
    never change
    nothing better than you 

    都去完后,删除文件对象并关闭

    >>>del a
    >>>a.close()

    3.2路径和目录 

    3.3os异常

    os模块中函数在失败时会抛出OSError异常,如果希望程序出错时行为友好,那么必须处理这个异常,与IOError一样,异常的字符串表示描述了遇到的问题。

    3.3.1路径

    os包含另外一个模块os.path,它提供了操作路径的函数。

    3.3.2目录内容

    如何才能找到硬盘上实际存在哪些内容,os.listdir模块会返回一个目录下所有名称条目,包括文件和子目录等内容。

    获取目录内容

    >>>os.listdir("C:\python31")
    [blablablabla]

    列出桌面或者主目录的内容

    使用print_dir_by_ext可以列出桌面或者主目录的内容。windows的桌面是一个文件夹,它的电影路径是c:\Documents and Settings\username\Desktop,其中username为帐户名。

    3.3.3获取文件信息

    可以很容易地判断一个文件是指向文件还是指向一个目录,如果是指向文件,os.path.isfile将返回true,如果是指向目录,os.path.isdir将返回true。

    其他类型的目录条目

    在某些平台下,一个目录也许包含许多其他类型的条目,例如符号链接,套接字还有设备等,这些类型的条目的具体含义取决于特定的平台。

    递归目录列表

    可以将os.path.isdir and os.listdir两者结合起来,例如:递归地处理子目录,可以列出一个目录的内容,它的子目录,子目录的子目录,以此类推,对于这个目的,编写一个递归函数很有用。

    注意上面的函数与之前编写的print_dir函数很类似。然而,这个函数为每个条目构造了完整路径full_path,因为这即符合了打印需求,也考虑到子目录的需求

    3.3.4重命名,移动,复制和删除文件

    模块shutil中包含了操作文件的函数。可以用shutil.move重命名一个文件:

    或者,可以使用它将一个文件移动到另外一个目录下:

    shutil模块还提供了copy函数,它见一个文件复制为具有一个新名称的文件,或者复制一个新目录下,可以简单地使用如下代码:

    删除则是:

    如果你是要给老派的UNIX黑客,可以用os.unlink,来完成。

    文件权限

    文件权限在不同平台上的工作方式是不同的,然而如果需要改变一个文件或者目录的权限,可以使用os.chmod函数,它与unix或者linux系统调用chmod的工作方式相同。

    3.3.5轮换文件

    3.3.6创建和删除目录

    创建时需要调用os.mkdir就可以实现该操作,然而要创建的目录的父母路首先要存在。否则会发生异常:

    >>>os.mkdir("c:\photos\zoo\snakes")

    可以使用os.makedirs,该函数可以创建不存在的父目录,例如,下面的代码将在比亚哦的时候创建C:\photos和C:\photoszoo

    >>>os.makedirs("C:\photos\zoo\snakes")

    使用函数os.rmdir("C:\photos\zoo\snakes")

    上面代码只会删除snakes

    而shutil.rmtree可以删除目录下包含其他文件和子目录。使用时必须小心,因为传入一个错误路径它将删除一组文件,您甚至不知道发生了什么情况。例如,下面代码删除了完整的图片集,包括zoo,snakes

    3.3.8通配

    如果您曾经使用过windows系统的cmd或者GUN/Linux等操作系统的shell,可能看到过通配符模式,通配符是一些特殊字符,例如*和?,可以使用它们匹配许多名称类似的文件。如,使用模式P*可以匹配名称P开头的所有文件,*.txt是后缀为.txt文件。

    通配不分大小写

    我们试着寻找M开头的条目,使用glob.glob返回符合模式的包含磁盘驱动符和目录名称的路径。

    在这里,提供其他通配符:

  • 相关阅读:
    unity-疑难杂症(一)
    unity-【UI】点击交互(一)
    asp.net core 附加进程调试、指令等
    几种定时器(timer)的区别
    ObjectDisplay 对象属性展示 Display
    IEnumerable,ICollection,IList,List 比较
    Excel等格式文件从服务端调用导出
    Azure DevOps 与VS 2019
    从 数据库表 生成 项目实体 文件
    Border样式
  • 原文地址:https://www.cnblogs.com/romanhzzz/p/4040978.html
Copyright © 2020-2023  润新知