美文网首页
14 文件读写模式[python基础]

14 文件读写模式[python基础]

作者: 乱弹琴给 | 来源:发表于2020-01-01 19:30 被阅读0次

文件读写模式

值描述'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()

相关文章

网友评论

      本文标题:14 文件读写模式[python基础]

      本文链接:https://www.haomeiwen.com/subject/ggsgoctx.html