day3-python-文件操作(2)

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

remove(path) 删除文件
rename(src,dst) 重命名文件
renames(old,new) 递归重命名目录或文件
walk(top,topdown=True,οnerrοr=None,followlinks=False) 返回指定目录下每次遍历的路径名、目录列表、文件列表,top为指定的顶层目录,topdown表示自顶向下遍历,onerror指定异常函数,followlinks是否递归遍历链接文件。
chdir(path) 改变当前工作目录
listdir(path) 列出指定目录的文件和目录
getcwd() 返回当前工作目录
mkdir(path,mode=0o777) 创建目录
makedirs(path,mode=0o777) 递归创建目录
rmdir(path) 删除目录
removedirs(path) 递归删除目录

实例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
>>> 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) 两个路径名是否指向同一个文件


实例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> 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


下面是统计指定目录下文件数和代码行数的小例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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





转载于:https://www.cnblogs.com/bruceg/p/5150371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值