python-文件及文件夹操作

时间:2022-08-04 21:39:26

python os模块


   1. os.sep 可以取代操作系统特定的路径分割符。
   2. os.name 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
   4. os.getenv() os.putenv()函数分别用来读取和设置环境变量。,,
   7. os.system() 函数用来运行shell命令。
   8. os.linesep 字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。,
12. os.curdir 返回当前目录('.')

,
os.path.getsize(name) :获得文件大小,如果name是目录返回0L
os.path.abspath(name) :获得绝对路径
os.path.normpath(path) :规范path字符串形式
os.path.join(path,name) :连接目录与文件名或目录
os.path.basename(path) :返回文件名
os.path.dirname(path) :返回文件路径


http://hi.baidu.com/jxq61/item/e52aaddb064cb43e49e1dd88

文件夹与文件

1,取得当前目录

s = os.getcwd()

# s 中保存的是函数得到当前工作目录,即当前Python脚本工作的目录路径。

# -* - coding: UTF-8 -* -
import os
import time
#在工作目录下创建一个“2012-08-06_13-20-29”这样的文件夹
folder = time.strftime(r"%Y-%m-%d_%H-%M-%S",time.localtime())
os.makedirs(r'%s/%s'%(os.getcwd(),folder))

2,更改当前目录

os.chdir( "C:\\123")
#将当前目录设为 "C:\123", 相当于DOC命令的 CD C:\123   
#说明: 当指定的目录不存在时,引发异常。

3,将路径分离为目录名与文件名

fpath, fname = os.path.split( "c:\\123\\456\\test.txt" )

print fpath
print fname
显示:
c:\123\456
test.txt

# 事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在

4,将路径分离为目录文件名与扩展名

fpathandname, fext = os.path.splitext( "c:\\123\\456\\test.txt" )
print fpathandname
print fext
显示:
c:\123\456\test
.txt

5,判断一个路径( 目录或文件)是否存在

b = os.path.exists( "c:\\123\\456\\test.txt")
返回值b: True 或 False

6,判断一个路径是否文件且存在

b = os.path.isfile( "c:\\123\\456\\test.txt")
返回值b: True 或 False

7,判断一个路径是否目录且存在

b = os.path.isdir( "c:\\123\\456\\")
返回值b: True 或 False

8,获取某目录中的文件及子目录的列表        

L = os.listdir( "c:\\" )
print L
显示 :
['1.avi', '1.jpg', '1.txt', 'CONFIG.SYS', 'Inetpub', 'IO.SYS', 'KCBJGDJC', 'KCBJGDYB', 'KF_GSSY_JC', 'MSDOS.SYS', 'MSOCache', 'NTDETECT.COM', 'ntldr', 'pagefile.sys', 'PDOXUSRS.NET', 'Program Files', 'Python24', 'Python31', 'QQVideo.Cache', 'RECYCLER', 'System Volume Information', 'TDDOWNLOAD', 'test.txt', 'WINDOWS']
# 这里面既有文件也有目录


1 获取某指定目录下的所有子目录的列表

def getDirList( p ):
p = str( p )
if p=="":
return [ ]
p = p.replace( "/","\\")
if p[ -1] != "\\":
p = p+"\\"
a = os.listdir( p )
b = [ x for x in a if os.path.isdir( p + x ) ]
return b
print getDirList( "C:\\" )
结果:
['Documents and Settings', 'Downloads', 'HTdzh', 'KCBJGDJC', 'KCBJGDYB', 'KF_GSSY_JC', 'MSOCache', 'Program Files', 'Python24', 'Python31', 'QQVideo.Cache', 'RECYCLER', 'System Volume Information', 'TDDOWNLOAD', 'WINDOWS']

2 获取某指定目录下的所有文件的列表

def getFileList( p ):
p = str( p )
if p=="":
return [ ]
p = p.replace( "/","\\")
if p[ -1] != "\\":
p = p+"\\"
a = os.listdir( p )
b = [ x for x in a if os.path.isfile( p + x ) ]
return b
print getFileList( "C:\\" )
结果:
['1.avi', '1.jpg', '1.txt', '123.txt', '12345.txt', '2.avi', 'a.py', 'AUTOEXEC.BAT', 'boot.ini', 'bootfont.bin', 'CONFIG.SYS', 'IO.SYS', 'MSDOS.SYS', 'NTDETECT.COM', 'ntldr', 'pagefile.sys', 'PDOXUSRS.NET', 'test.txt']

9,创建子目录

os.makedirs(   "C:\\123\\456\\789")
调用有可能失败,可能的原因是:
(1) path 已存在时(不管是文件还是文件夹)
(2) 驱动器不存在
(3) 磁盘已满
(4)磁盘是只读的或没有写权限

10,删除子目录

os.rmdir( "c:\\123\\456\\" )  
产生异常的可能原因:
(1) path 不存在
(2) path 子目录中有文件或下级子目录
(3) 没有操作权限或只读
# 测试该函数时,请自已先建立子目录。

11,删除文件

os.remove(  "c:\\123\\456\\test.txt" ) 
产生异常的可能原因:
(1)   filename 不存在
(2) 对filename文件, 没有操作权限或只读。

12,文件改名

os.name( oldfileName, newFilename)
产生异常的原因:
(1) oldfilename 旧文件名不存在

(2) newFilename 新文件已经存在时,此时,您需要先岀除 newFilename 文件

13,读写文件

# -* - coding: UTF-8 -* -
# ! /usr/bin/python

spath = "D:\\myapps\\python\\HelloWorld.txt"
f = open(spath, "w" )
f.write( "First line 1.\n" )
f.writelines( "First line 2." )
f.close()

f = open(spath, "r" )
for line in f:
print ( "每一行的数据是:%s" % line)
f.close()

'''
知识点: 如何读写文件
'''

14,遍历所有文件/目录

# -* - coding: UTF-8 -* -
# ! /usr/bin/python
import os
import os.path
# os,os.path里包含大多数文件访问的函数,所以要先引入它们.
# 请按照你的实际情况修改这个路径
rootdir = "D:\\myapps\\python\\"
for parent, dirnames, filenames in os.walk(rootdir):
# case 1:
for dirname in dirnames:
print ( " parent is: " + parent)
print ( " dirname is: " + dirname)
# case 2
for filename in filenames:
print ( " parent is: " + parent)
print ( " filename with full path : " + os.path.join(parent, filename))

''' 知识点:

* os.walk返回一个三元组.其中dirnames是所有文件夹名字(不包含路径),filenames是所有文件的名字(不包含路径).parent表示父目录.
* case1 演示了如何遍历所有目录.
* case2 演示了如何遍历所有文件.
* os.path.join(dirname,filename) : 将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".
'''

15,分割路径名与文件名

# -* - coding: UTF-8 -* -
# ! /usr/bin/python
import os.path
# 常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.
# 根据你机器的实际情况修改下面参数.
spath = "D:\\myapps\\python\\1.py"

# case 1:
p,f = os.path.split(spath);
print ( " dir is: " + p)
print ( " file is: " + f)

# case 2:
drv,left = os.path.splitdrive(spath);
print ( " driver is: " + drv)
print ( " left is: " + left)
# case 3:
f,ext = os.path.splitext(spath);
print ( " f is: " + f)
print ( " ext is: " + ext)
'''
知识点: 这三个函数都返回二元组.
* case1 分隔目录和文件名
* case2 分隔盘符和文件名
* case3 分隔文件和扩展名
'''

16,复制文件/文件夹

# -* - coding: UTF-8 -* -
# ! /usr/bin/python
import shutil
import os
import os.path

src = "D:\\myapps\\python\\2.py"
dst = "D:\\myapps\\python\\2.bak.py"
dst2= "D:\\myapps\\2.bak2.py"

#判断源文件是否存在,如果不存在则生成一个src测试文件
dir1 = os.path.dirname(src)
print ( "dir1 %s " % dir1)
if (os.path.exists(src) == False):
os.makedirs(dir1)
f1 = open(src, "w" )
f1.write( "line a\n" )
f1.write( "line b\n" )
f1.close()

#拷贝文件src到dst
shutil.copyfile(src, dst)
shutil.copyfile(src, dst2)

#读取dst
f2 = open(dst, "r" )
for line in f2:
print (line)
f2.close()

# 测试复制文件夹树
try :
srcDir = "D:\\myapps"
dstDir = "D:\\myapps2"
# 如果dstDir已经存在,那么shutil.copytree方法会报错!
# 这也意味着你不能直接用d:作为目标路径.
shutil.copytree(srcDir, dstDir)
except Exception as err:
print (err)

'''
知识点:
* shutil.copyfile:如何复制文件
* os.path.exists:如何判断文件夹是否存在
* shutil.copytree:如何复制目录树
'''