Python常见的I/O操作常用手法
在项目开发过程中,时常需要对目录、文件进行相关的操作,比如读取文件的内容,遍历目录等等。在Python中也提供了强大的类库支持这些I/O操作。本文将记录Python中对文件、目录的一些常见操作手法。
涉及文件、目录操作的模块
os、os.path、shutil
文件、目录的创建、删除
创建目录可以简单的使用下面的语句即可完成(支持2层目录的创建):os.mkdir("test")
os.mkdir("test/test")
相对于目录的创建而言,目录的删除就会有点小陷阱了,对于一个空目录的删除,可以简单的使用下面的语句完成:os.mkdir("test/test")
os.rmdir("test")
但是,如果该目录不为空将会抛出“Directory not empty: 'test'”异常了。如果在其他语言中可能需要一层一层递归进行删除,但是在Python中,有个神器提供目录树的删除的功能,可以使用下面的神器解决:shutil.rmtree("test")
相对于目录的操作,文件的读取(创建)与删除就简单多了,可以使用下面的语句完成:os.open("test/test.py",1)
os.remove("test/test.py")
但是,当文件不存在的时候,os.open将会抛出“ No such file or directory: 'test/test.py'”异常,那么我们可以使用python官方推荐的文件读取(创建)操作手法(如果文件存在就是追加模式操作,flag:"r","w","a"):os.remove("test/test.py")
with open("test/test.py", "a") as file_obj:
file_obj.write("#/usr/bin/env python")
以上这种的写法就无需执行关闭file_obj.close(),详细内幕请参考with的用法。file_obj.write("#/usr/bin/env python")
遍历目录获取文件
result = []
for path,dirs,files in os.walk("test"):
for file in files:
result.append(path+"/"+file)
打印result,可以看到该目录下所有文件(包括子目录),如本人的信息如下:for path,dirs,files in os.walk("test"):
for file in files:
result.append(path+"/"+file)
['test/test.py', 'test/test1/tes1.py', 'test/test1/nohup.out']
我们也可以针对上面的例子,稍加修改,只需获取py文件,代码片段如下:result = []
for path,dirs,files in os.walk("test"):
for file in files:
if file.endswith(".py"):
result.append(path+"/"+file)
打印result,可以看到该目录下所有文件(包括子目录),如本人的信息如下:for path,dirs,files in os.walk("test"):
for file in files:
if file.endswith(".py"):
result.append(path+"/"+file)
['test/test.py', 'test/test1/tes1.py']
推荐(
反对(