Python文件与文件夹的操作

Posted by Kerwen Blog on September 22, 2016

python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。

导入的方法是:

1
2
import os   
import shutil   

取得当前目录

1
s = os.getcwd()   

更改当前目录

1
os.chdir( "C:\\123")   

路径名分解

分解为目录名和文件名两部分

1
2
3
4
5
6
7
8
fpath , fname = os.path.split( "你要分解的路径")


>>> a,b=os.path.split("c:\\dir1\\dir2\\file.txt")
>>> print a
c:\dir1\dir2
>>> print b
file.txt

分解文件名的扩展名

1
2
3
4
5
6
7
8
fpathandname , fext = os.path.splitext( "你要分解的路径")


>>> a,b=os.path.splitext("c:\\dir1\\dir2\\file.txt")
>>> print a
c:\dir1\dir2\file
>>> print b
.txt

路径(目录或文件)是否存在

1
2
3
4
5
6
7
8
9
10
11
b = os.path.exists( "你要判断的路径")


>>> os.path.exists ("C:\\") #该路径存在
True
>>> os.path.exists ("C:\\123\\") #该路径不存在
False
>>> os.path.exists ("C:\\123.txt") #该文件不存在
False
>>> os.path.exists ("C:\\test.txt")  #该文件存在
True

判断一个路径是否存在

1
b = os.path.isdir( "你要判断的路径")	

判断是否是绝对路径

1
os.path.isabs()

判断一个路径是否有需要的文件

1
b = os.path.isfile( "你要判断的路径")

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

1
2
3
L = os.listdir( "你要判断的路径")

>>> os.listdir("C:\\")   #这里包括隐藏文件也显示出来了

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

1
2
3
4
5
6
7
8
9
10
11
12
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
 
getDirList( "C:\\" )

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

1
2
3
4
5
6
7
8
9
10
11
12
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
 
getFileList( "C:\\" )

创建目录

1
os.makedirs( path )   # path 是"要创建的子目录"

创建多级目录

1
os.makedirs(r“c:\python\test”)

创建以时间命名文件夹名

1
2
3
4
5
import os
import time

folder = time.strftime(r"%Y-%m-%d_%H-%M-%S",time.localtime())
os.makedirs(r'%s/%s'%(os.getcwd(),folder))

删除目录

只能删除空目录

1
os.rmdir( path )   # path: "要删除的子目录"

删除多个目录

1
os.removedirs(r“c:\python”)

空目录、有内容的目录都可以删

1
shutil.rmtree("dir")    

创建空文件

1
os.mknod("test.txt")        

删除文件

1
os.remove(   filename )   # filename: "要删除的文件名"

重命名文件(目录)

1
os.rename( oldfileName, newFilename)

获取文件大小

1
os.path.getsize(filename)

打开文件

1
fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件

关于open 模式:

w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )

读取文件:

1
2
3
4
5
6
7
8
def read_file():
    try:
        f = open("Student.txt", "r")
        for str in f.readlines():
            # do something
        f.close()
    except Exception:
        print("Could not read file.")

写文件:

1
2
3
4
5
6
7
def Save_file(str):
    try:
        f=open("student.txt","a")
        f.write(str + "\n")
        f.close()
    except Exception:
        print("Could not save file.")

按时间排序目录下的文件

排序可以通过list.sort来巧妙的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os

DIR = "/home/serho/workspace/lisp"

def compare(x, y):
	stat_x = os.stat(DIR + "/" + x)
	stat_y = os.stat(DIR + "/" + y)
	if stat_x.st_ctime < stat_y.st_ctime:
		return -1
	elif stat_x.st_ctime > stat_y.st_ctime:
		return 1
	else:
		return 0

iterms = os.listdir(DIR)

iterms.sort(compare)

for iterm in iterms:
	print iterm