您的位置:首页 > 编程语言 > Python开发

Python之文件操作

2016-05-09 14:46 423 查看

文件读写操作

 打开文件

    file =  open(fileName, mode),mode默认为"r"
   例如file = ope("test.txt", "r").以读的方式打开文件.文件操作完毕记得关闭.file.close()
   其中,mode可以有以下选择:

"r"     以读方式打开,只能读文件.如果文件不存在则会发生异常
"r+"   以读写方式打开,文件可读可写,可写到文件的任何位置
"w"    以写方式打开,只能写文件.如果文件不存在则创建;如果文件存在则清空再打开
"w+"  以读写方式打开,文件可读可写.如果文件不存在则创建;如果文件存在则清空再打开
"a"     以追加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾
"a+"   以追加的方式打开可读可写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾
"rb"    以二进制读方式打开,只能读文件.如果文件不存在则会发生异常
"wb"   以二进制写方式打开,只能写文件.如果文件不存在则创建;如果文件存在则清空再打开
"rt"     以文本读方式打开,只能读文件.如果文件不存在则发生异常
"wt"    以文本写方式打开,只能写文件.如果文件不存在则创建;如果文件存在则清空再打开
"rb+"   以二进制读方式打开,可以读写文件.如果文件不存在则发生异常
"wb+"  以二进制写方式打开,可以读写文件.如果文件不存在,则创建文件;如果文件存在则清空再打开

    读文件

    文件test.txt的内容为:

<span style="font-size:14px;">11111111111-----aaaaaaaaa
22222222222-----bbbbbbbb
33333333333-----cccccccccc</span>


    read([size])          size为读取大小,单位为byte,不指定size的话则一次性读全部内容

f = open("test.txt")
print f.read()
f.close()
'''
11111111111-----aaaaaaaaa
22222222222-----bbbbbbbb
33333333333-----cccccccccc
'''


    readline([size])    按行读取,如果指定了size,可能只返回一行的一部分

f = open("test.txt")
print f.readline()
f.close()
'''
<p>11111111111-----aaaaaaaaa</p>'''


    readlines([size])   把文件的每一行作为list的一个元素,返回整个list

f = open("test.txt")
print f.readlines()
f.close()
'''
['11111111111-----aaaaaaaaa\n', '22222222222-----bbbbbbbb\n', '33333333333-----cccccccccc']
'''


    写文件

   fp.write(str)             把str写到文件中,write()并不会在str后加上一个换行符
   fp.writelines(seq)   把seq的内容全部写到文件中(多行一次性写入).这个函数也只是忠实地写入,不会在每行后面加上任何东西.

    清空文件内容

    truncate()

    仅当以r+,rb+,"w","wb","wb+"等以可写模式打开的文件才能执行该功能

文件和文件夹操作

    使用前先导入os模块.

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r"/home/python")
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split() 
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
重命名:os.rename(old, new)
创建多级目录:os.makedirs(r"/home/python")
创建单个目录:os.mkdir("test")
获取文件属性:os.stat(file)
修改文件权限与时间戳:os.chmod(file)
获取文件大小:os.path.getsize(filename)
os.path.join(path1[, path2[, ...]])     将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    练习:递归获取目录下所有文件名
def get_files(file_path):
files = os.listdir(file_path)
for file in files:
file_full_dir = os.path.join(file_path, file)
if os.path.isdir(file_full_dir):
get_files(file_full_dir)
else:
print os.path.join(file_path, file_full_dir)

    很容易理解,对目录下所有文件和文件夹,如果是文件则输出,如果是文件夹递归查找.
    或者也可以用os.walk()来实现
def get_files(file_path):
for fpathe, dirs, fs in os.walk(file_path):
for f in fs:
print os.path.join(fpathe, f)

返回的是一个三元tupple(dirpath,
dirnames, filenames),
其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件.
dirpath是一个string,代表目录的路径,
dirnames是一个list,包含了dirpath下所有子目录的名字,
filenames是一个list,包含了非目录文件的名字.这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: