文件读写模式
值描述'r'
读取模式(默认值)
'w'
写入模式
'x'
独占写入模式
'a'
附加模式
'b'
二进制模式(与其他模式结合使用)
't'
文本模式(默认值,与其他模式结合使用)
'+'
读写模式(与其他模式结合使用)
文件的打开和关闭
*
使用open函数打开文件
f = open('test.txt')
*
使用close函数关闭文件
f.close()
//tips 此处要做异常处理
*
使用with语法
//可以避免打开忘记关闭,异常处理简单化
with open('somefile.txt') as f:
do_something(f)
//使用with到达语句的末尾时,将自动关闭文件,即便出现异常亦如此
文件的读取
//打开一个文件,读取都是有连续性的
*
read():读取文件,可以指定参数,表示读几个字符(字节)
def read_file():
file_name = 'test.txt'
//绝对路径,以下两种都可以,还可以用os.path.join()提高兼容性
file_path = 'C:\\users\\yimal\\desktop\\test.txt'
file_path2 = 'C:/users/yimal/desktop/test.txt'
//使用普通方式来打开,后面需要用close()关闭
f = open(file_name,encoding='utf-8')
//使用with打开
with open(file_name,encoding='') as f: //一般用这个方式
//读文件所有内容
rest = f.read()
//读取指定的几个内容
rest = f.read(8)
//随机读取
f.seek(20) //跳过前20个字节
rest = f.read(5)
print(rest)
//关闭文件
f.close() //使用with就不用关闭
if __name__ == '__main__':
rest = read_file()
*
readline():读取一行数据,可以指定参数,表示读前几个字符(字节)
rest = f.readline() //按行读取
rest = f.readline(8) //按行读取前几个
*
readlines():读取所有行,并返回列表
rest = f.readlines() //得到一个列表
for i in rest:
print(i)
文件的写入
*
使用write函数向打开的文件对象写入内容
def write_file():
file_name = 'write_test.txt'
f = open(file_name, 'w') //如果没有会自动创建一个文件
f.write('hello')
f.write('world') //会追加在上一个写入内容的后面
f.write('\n') //换行
f.close()
*
使用writelines函数向打开的文件对象写入多行内容
def write_mult_line():
file_name = 'write_mult_line.txt'
with open(file_name,'w', encoding='utf-8') as f:
l = ['第一行','\n','第二行','\n\r','第三行']
f.writelines(l)
//记录用户日志,时间+用户ID
def write_user_log():
rest = '用户:{0} - 访问时间 {1}'.format(random.randint(1000,9999),datetime.now())
file_name = 'write_user_log.txt'
with open(file_name, 'a',encoding = 'utf-8') as f:
f.write(rest)
f.writ('\n')
//对一个文件同时进行读写操作
def read_and_write():
file_name = 'read_and_write.txt'
with open(file_name, r+ ,encoding = 'utf-8') as f:
read_rest f.read()
if '1' in read_rest:
f.write('aaa')
f.write('\n')
else:
f.write('bbb')
f.write('\n')
if __name__ == '__main__':
write_file() //
实战:文件备份
class FileBackup(Object): //继承object
def init(self, src, dist) //构造方法,传递参数
self.src = src //要备份的目录 ,放到类实例的成员变量
self.dist = dist //备份到该目录 ,放到类实例的成员变量
def read_files(self):
//读取SRC目录下文件列表
//pass
ls = os.listdir(self.src)
for l in ls:
//循环处理每一个文件
self.backup_file(l)
def backup_file(self, file_name):
//备份文件
//pass
//1 判断dist是否存在,如果不存在,要创建这个目录
if not os.path.exists(self.dist):
os.makedirs(self.dist)
print('指定的目录不存在,创建完成!')
// 2 判断文件是否位我们要备份的文件
//拼接文件的完整路径
full_src_path = os.path.join(self.src, file_name)
full_dist_path = os.path.join(self.src, file_name)
//首先判断是否是文件夹,可以借助于文件的后缀名进行判断
if os.path.isfile(full_src_path) and os.path.splitext(full_src_path)[-1].lower() == '.txt':
print(full_src_path)
//3 读写文件内容
with open(full_dist_path, 'w', encoding='utf-8') as f_dist:
print(">>开始北非{0}".format(file_name))
with open(full_src_path, 'r', encoding='utf-8') as f_src:
while True:
rest = f_src.read(100)
if not rest:
break
//4 把读取到的内容写入到新的文件中
f_dist.write(rest)
print(">>>{0}备份完成".format(file_name))
f_dist.flush()
else:
print("文件类型不符合要求,跳过")
//对backup_file方法进行优化
def backup_file(self, file_name):
//备份文件
//pass
//1 判断dist是否存在,如果不存在,要创建这个目录
if not os.path.exists(self.dist):
os.makedirs(self.dist)
print('指定的目录不存在,创建完成!')
// 2 判断文件是否位我们要备份的文件
//拼接文件的完整路径
full_src_path = os.path.join(self.src, file_name)
full_dist_path = os.path.join(self.src, file_name)
//首先判断是否是文件夹,可以借助于文件的后缀名进行判断
if os.path.isfile(full_src_path) and os.path.splitext(full_src_path)[-1].lower() == '.txt':
print(full_src_path)
//3 读写文件内容
with open(full_dist_path, 'w', encoding='utf-8') as f_dist, \ \\这里的斜杠是表示语句没有结束,强制换行
open(full_src_path, 'r', encoding='utf-8') as f_src:
print(">>开始备份{0}".format(file_name))
while True:
rest = f_src.read(100)
if not rest:
break
//4 把读取到的内容写入到新的文件中
f_dist.write(rest)
print(">>>{0}备份完成".format(file_name))
f_dist.flush()
else:
print("文件类型不符合要求,跳过")
if name == 'main':
base_path = os.path.dirname(os,path.abspath(file))
src_path = os.path.join(base_path, 'src')
dist_path = os.path.join(base_path, 'dist')
bak = FileBackup(src_path, dist_path)
bak.read_files()
网友评论