文件读写操作
打开文件
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).
其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件.
dirpath是一个string,代表目录的路径,
dirnames是一个list,包含了dirpath下所有子目录的名字,
filenames是一个list,包含了非目录文件的名字.这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name).