Python笔记--文件和目录
路径:
反斜杠在Python字符串中是一个特殊字符,因此必须对路径中的反斜杠进行转义。
路径“C:\Windows\Temp”要用"C:\\Windows\\Temp"代替。
创建文本文件,w写文件,如果没有该文件会创建新文件。如果文件中已有内容会被清空。
def make_text_file(): a = open('test.txt', 'w') a.write("This is how you create a text file") a.close()
向文件中追加文本,a追加文本,要求文件已存在,并且不会清空文件中已有内容。
def add_some_text(): a = open('test.txt', 'a') a.write("Here is some addtional text") # 注:write不会自动换行 a.close()
添加多行文本
def even_more_text(): a = open('test.txt', 'a') a.write(""" here is more text """) a.close()
读文本文件
def print_line_lengths(): a = open('test.txt', 'r') text = a.readlines() for line in text: print(len(line))
文件异常:IOErrOr
试图打开并读取一个不存在的文件
试图在一个不存在的目录中创建文件
试图打开一个没有读访问权限的文件
试图在一个没有写访问权限的目录下创建文件
计算机遇到磁盘错误
OS
os.path提供了操作路径的函数。使用OS.path.join可将目录名称组合成路径。OS.path.split具有相反的功能,它将路径的最后。(.是当前目录,..是父目录)
一个组件提取出来。
>>> import os.path >>> os.path.join("snakes", "python") 'snakes\\python' >>> os.path.split("C:\\Program Files\\Python30\\Lib") ('C:\\Program Files\\Python30', 'Lib')
将一个路径分解为若干目录的名称。
def split_fully(path): parent_path, name = os.path.split(path) if name == "": return (parent_path, ) else: return split_fully(parent_path) + (name, )
os.path.splitext可分解出一个文件的扩展名。
>>> os.path.splitext("image.jpg") ('image', '.jpg') >>> extension = os.path.splitext("image.jpg")[1] >>> extension '.jpg'
os.path.normpath能够规范化或“清理路径”。
>>> os.path.normpath(r"C:\\Programe Files\Perl\..\Python30") 'C:\\Programe Files\\Python30'
os.path.abspath将相对路径转变为绝对路径。
>>> os.path.abspath("other_stuff") 'D:\\我的文件\\学习\\python\\learn\\other_stuff'
os.listdir能够获取一个目录下的条目列表。
>>> os.listdir("D:\\Thunder") ['BHO', 'Profiles', 'Program', 'Thunder BHO Platform', 'UninstallXLWFP.exe']
使用os.path.join可用构造出上面每个条目的完整路径。
def print_dir(dir_path): for name in os.listdir(dir_path): print(os.path.join(dir_path, name))
sorted()函数可以对条目排序。
>>> sorted(os.listdir("D:\\Thunder")) ['BHO', 'Profiles', 'Program', 'Thunder BHO Platform', 'UninstallXLWFP.exe']
os.path.isfile可以判断一个路径是否指向文件。
>>> os.path.isfile("C:\\Program Files") False
os.path.isdir可用判断一个路径是否指向目录。
>>> os.path.isdir("C:\\Program Files") True
递归目录列表
def print_tree(dir_path): for name in os.listdir(dir_path): full_path = os.path.join(dir_path, name) print(full_path) if os.path.isdir(full_path): print_tree(dir_path)
shutil
包含了操作文件的函数。
shutil.move可以给文件重命名,或者将它移到到另一个目录下。
>>> import shutil >>> shutil.move("test.txt", "test1.txt") 'test1.txt'
shutil.copy将文件复制成一个新文件并保存。
>>> shutil.copy("test.txt", "D:\\copy.txt") # 将test.txt复制了一份名为copy.txt,保存在D盘下 'D:\\copy.txt'
os.remove可删除文件
>>> import os >>> os.remove("D:\\copy.txt")
os.mkdir可以创建目录(目录create a dir必须存在)。
>>> os.mkdir("D:\\create a dir\\a")
os.makedirs可以创建多个不存在的目录(目录create a dir不需要存在)。
>>> os.makedirs("D:\\create a dir\\a")
os.rmdir可用删除空目录。如果不是空目录会报错。
>>> os.rmdir("D:\\create a dir") Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [WinError 145] 目录不是空的。: 'D:\\create a dir'
shutil.rmtree可以删除一整个非空的目录。
>>> shutil.rmtree("D:\\create a dir")
通配
通配符 | 匹配 | 示例 |
* | 0或多个任意字符 | *.m*匹配扩展名以m开头的名称 |
? | 任意单个字符 | ???匹配恰好包含三个字符的名称 |
[...] | 方括号中列出的任意一个字符 | [AEIOU]*匹配以大写的原因字母开头的名称 |
[!...] | 不在方括号中出现的任意一个字符 | *[!s]匹配不以s结尾的名称 |
返回当前目录中扩展名为txt的文件。
>>> import glob >>> glob.glob("*\\*.txt")