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

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

3.1文件对象

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

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函数是不会自动换行的,所以我要使用转义序列\n。

 

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:\\photos\zoo

>>>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返回符合模式的包含磁盘驱动符和目录名称的路径。

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

 

posted @ 2014-10-22 16:35  以诗答诗  阅读(515)  评论(0编辑  收藏  举报