gaojinguan 发表于 2017-4-25 09:08:08

python-文件操作(2)


本文内容涉及python中的os模块和os.path模块的常用操作,这两个模块提供了与平台和操作系统无关的文件系统访问方法。os模块负责大部分的文件系统操作,包括:删除文件、重命名文件、遍历目录树等;os.path模块提供了一些针对路径名的操作,包括:获取文件和子目录信息,文件路径查询等。

1. os模块



remove(path) 删除文件

rename(src,dst) 重命名文件

renames(old,new) 递归重命名目录或文件

walk(top,topdown=True,onerror=None,followlinks=False) 返回指定目录下每次遍历的路径名、目录列表、文件列表,top为指定的顶层目录,topdown表示自顶向下遍历,onerror指定异常函数,followlinks是否递归遍历链接文件。

chdir(path) 改变当前工作目录

listdir(path) 列出指定目录的文件和目录

getcwd() 返回当前工作目录

mkdir(path,mode=0o777) 创建目录

makedirs(path,mode=0o777) 递归创建目录

rmdir(path) 删除目录

removedirs(path) 递归删除目录



实例代码:

>>> import os
>>> os.listdir('.')
[]
>>> os.mkdir('test1')
>>> os.makedirs('test2/test21/test211')
>>> os.listdir('.')
['test2', 'test1']
>>> os.listdir('./test2')
['test21']
>>> open('test.txt','w')
<open file 'test.txt', mode 'w' at 0x7faa26f69930>
>>> os.listdir('.')
['test2', 'test1', 'test.txt']
>>> os.remove('test.txt')
>>> os.listdir('.')
['test2', 'test1']
>>> os.getcwd()
'/home/alexzhou/study_workspace/python/test'
>>> os.chdir('./test1')
>>> os.getcwd()
'/home/alexzhou/study_workspace/python/test'
>>> os.rename('test1','test3')
>>> os.listdir('.')
['test2', 'test3']
>>> os.renames('test2/test21/test211','test1/test11/test111')
>>> os.listdir('.')
['test1', 'test3']
>>> os.listdir('test1')
['test11']
>>> os.listdir('test1/test11')
['test111']
>>> open('test3/test.txt','w')
<open file 'test3/test.txt', mode 'w' at 0x7faa26f69930>
>>> for top,dirs,files in os.walk('.'):
...   print 'top:',top
...   print 'dirs:',dirs
...   print 'files:',files
...
top: .
dirs: ['test1', 'test3']
files: []
top: ./test1
dirs: ['test11']
files: []
top: ./test1/test11
dirs: ['test111']
files: []
top: ./test1/test11/test111
dirs: []
files: []
top: ./test3
dirs: []
files: ['test.txt']
>>> os.remove('test3/test.txt')
>>> os.rmdir('test3')
>>> os.listdir('.')
['test1']
>>> os.removedirs('test1/test11/test111')
>>> os.listdir('.')
[]

2. os.path模块



basename(path) 去掉目录路径,返回文件名

dirname(path) 去掉文件名,返回目录路径

join(*path) 将分离的各部分组合成一个路径名

split(path) 返回(dirname(),basename())元组

splitdrive(path) 返回(drivename,pathname)元组

splitext(path) 返回(filename,extension)元组

exists(path) 指定文件或目录是否存在

isabs(path) 指定路径是否是绝对路径

isdir(path) 指定路径是否存在且是一个目录

isfile(path) 指定路径是否存在且是一个文件

islink(path) 指定路径是否存在且是一个符号链接

samefile(path1,path2) 两个路径名是否指向同一个文件



实例代码:

>>> os.path.basename('/home/zhoujianghai/study_workspace/python/test_file.py')
'test_file.py'
>>> os.path.dirname('/home/zhoujianghai/study_workspace/python/test_file.py')
'/home/zhoujianghai/study_workspace/python'
>>> os.path.join('home','zhoujianghai','study_workspace')
'home/zhoujianghai/study_workspace'
>>> os.path.split('/home/zhoujianghai/study_workspace/python/test_file.py')
('/home/zhoujianghai/study_workspace/python', 'test_file.py')
>>> os.path.splitdrive('/home/zhoujianghai/study_workspace/python/test_file.py')
('', '/home/zhoujianghai/study_workspace/python/test_file.py')
>>> os.path.splitext('/home/zhoujianghai/study_workspace/python/test_file.py')
('/home/zhoujianghai/study_workspace/python/test_file', '.py')
>>> os.path.samefile('../test_file.py','../test_file.py')
True
>>> os.path.exists('../test_file.py')
True

下面是统计指定目录下文件数和代码行数的小例子,发现是不是特别简单呢~~import sys,os
def count_file_lines(filepath):
ret = 0
f = open(filepath,"r")
for lines in f:
if lines.split():
ret += 1
return ret
if __name__ == '__main__':
top = './'
total_lines = 0
total_files = 0
for root,dirs,files in os.walk(top):
for filename in files:
ext = os.path.splitext(filename)[-1]
if ext in ['.py']:
filepath = root + os.sep + filename
total_files += 1
total_lines += count_file_lines(filepath)
print 'Total lines:',total_lines
print 'Total files: ',total_files

  

  转载请注明来自:Alex
Zhou,本文链接:http://codingnow.cn/python/377.html
页: [1]
查看完整版本: python-文件操作(2)