两种方式:
1.使用python对文件操作的方法
2.将命令放在控制台执行(commands模块等)
这里就介绍python对文件操作的方法吧,第二种方式其实就是针对不同的操作系统,执行相应的命令啦
文件及文件夹是否存在
1.判断文件是否存在
os.path.exists(r'C:\1.TXT')
os.path.isfile('d:/assist') #既可以判断文件是否存在,有空判断是否为文件
2.判断文件夹是否存在
os.path.exists(r'C:\1\')
os.path.isdir(r'C:\1\')
文件及文件夹的创建
1.创建文件
f = open(new_path_filename, 'w')
f.close()
2.创建文件夹
os.makedirs(path) #级联创建,如果父目录不存在的话
os.mkdir(path) #父目录不存在就创建失败
文件及文件夹的删除
1、删除文件
os.remove(filename)
2.删除文件夹
①文件夹为空
os.rmdir()
②文件夹非空:python的自带的方法太麻烦了(级联删除),还是使用控制台来删除吧,例如
commands.getstatusoutput("rm -r 目录")
前辈的:
import shutil
shutil.rmtree()
读写文件
1.读文件。(打开模式见附录)
① 使用try语句块来打开文件是一个好习惯,因为文件打开错误或者读取结束,都应该用finally关闭文件流。
try:
file = open("hello.bin","rb")
file.read() #read()读取全部内容
file.read(size)
file.readlines() #以整行的方式读取全部
finally:
if file:
file.close()
注意:要读取非ASCII编码的文本文件,就必须以二进制模式打开,再解码。比如GBK编码的文件:
f = open('/Users/michael/gbk.txt','rb')
u = f.read().decode('gbk')
可以使用python的codecs模块,将转码和打开文件放在一起
import codecs
with codecs.open('/Users/michael/gbk.txt','r','gbk') as f:
f.read() # u'\u6d4b\u8bd5'
②使用with语句块来打开文件。见上面
推荐用with语句块,因为可以代替复杂的try-finally语句块。同时,with语句块并不是只能对文件对象使用,它的使用条件是这样的:
1)with后面的方法返回的对象需要有__enter__()、__exit__(type,value,trace)方法
2)具体可以参考这篇文章噢
2.写文件
重要的都在读文件中写了,写文件就是file的write方法啦
with open('/Users/michael/test.txt','w') as f:
f.write('Hello, world!')
获取文件和目录路径
1.获取当前文件全路径
__file__ #方便吗
os.path.realpath(".")
os.path.abspath(".")
#F:\www\python\test\open\hello.txt
2.获取当前文件所在目录的全路径路径
os.getcwd()
os.path.split(__file__)[0] #好麻烦呀
os.path.dirname(__file__) #好麻烦啊
#F:\www\python\test\open
3.获取当前文件所在目录的上级目录的全路径
os.path.abspath(os.path.join(os.getcwd(),"..")) #还想继续上溯的话,继续添加“..”即可
#F:\www\python\test
4.获取文件的后缀名
os.path.splitext('/path/to/file.txt')
遍历某个文件夹
1.深度优先遍历
import os
def Test2(rootDir):
for lists in os.listdir(rootDir):
path=os.path.join(rootDir, lists)
print path #如果只需要当前目录的文件和文件夹,那么下面两行就不需要了
if os.path.isdir(path):
Test2(path)
2.广度优先遍历
import os
def Test1(rootDir):
list_dirs = os.walk(rootDir)
for tup in list_dirs:
for d in f[1]:
print os.path.join(root, d)
for f in tup[2]:
printos.path.join(root, f)
注意os.walk(目录)返回的是包含三个元素的tuple的生成器,该tuple=(root,dirs,files),root代表当前目录,dirs代表当前目录中所有直接子目录的列表,files代表当前中所有直接子文件的列表。
附录
文件读写模式
1、r 打开只读文件,该文件必须存在。
2、r+ 打开可读写的文件,该文件必须存在。
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
4、w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
7、上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。