• python之路day08--文件的操作


    文件的操作

    hanfei的博客.txt

    1/文件的路径
    2、编码方式
    3、操作方式:只读,只写,追加,读写,写读...
    只读
    f=open('hanfei的博客',mode='r',encoding='utf-8')
    print(f.read()) #战术上勤奋掩盖不了战略上的懒惰
    f.close()
    
    f=open('hanfei的博客',mode='rb')   #rb代表只读bytes类型,不需要写编码方式
    print(f.read(),type(f)) #b'xe6x88x98xe6x9cxafxe4xb8x8axe5x8bxa4xe5xa5x8bxe6x8exa9xe7x9bx96xe4
    xb8x8dxe4xbax86xe6x88x98xe7x95xa5xe4xb8x8axe7x9ax84xe6x87x92xe6x83xb0'
    f.close()
    读写 r+
    先读在写
    f =open('hanfei的博客',mode='r+',encoding='utf-8')
    print(f.read()) #先把内容读出来,现在光标在最后
    f.write('hahhaha') #然后在写
    f.close()
    
    
    f =open('hanfei的博客',mode='r+b') #以bytes类型写读,一般用不到
    print(f.read()) #先把内容读出来,现在光标在最后
    f.write('bbb'.encode('utf-8')) #然后在写
    
    先写再读
    f =open('hanfei的博客',mode='r+',encoding='utf-8') #文件内容:萨达撒大大萨达萨达是
    f.write('我是') #从头开始写,有多少位占多少位,光标在这里,最后在读出来
    print(f.read()) #撒大大萨达萨达是
    f.close() #
    只写
    f=open('hanfei的博客',mode='w',encoding='utf-8')
    f.write('放假了')  #如果没有这个文件,则创建写入。有这个文件写的时候会把文件内容清楚,在写
    
    
    f=open('hanfei',mode='wb')  #写成bytes类型
    f.write('博客园'.encode('utf-8'))   #srt-->>bytes存储 编码utf-8
    写读 w+
    f=open('hanfei的博客',mode='w+',encoding='utf-8')
    f.write('放假了')
    print(f.read()) #空的  因为写完后光标在最后,所以读不到什么东西了
    
    
    f=open('hanfei的博客',mode='w+',encoding='utf-8')
    f.write('放假了')
    f.seek(0) #设置光标
    print(f.read()) #放假了
    追加a
    f = open('hanfei',mode='a',encoding='utf-8')
    f.write('good!')  #默认光标在最后一位,在追加
    
    f = open('hanfei',mode='ab')
    f.write('day day up!'.encode('utf-8'))
    a+(也是读写)
    f = open('hanfei',mode='a+',encoding='utf-8')
    f.write('good!~~~')  #默认光标在最后一位,在追加
    f.seek(0)
    print(f.read()) #博客园good!good!good!day day up!good!good!good!~~~good!~~~

    功能详解:seek、tell、readline、readlines

    seek简介:用于移动文件读取指针到文件指定的位置
    file. seek(offset[, whence])
    whence:0,1,2三个参数,0表示文件开头,1表示当前位置,2表示文件结尾
    offset:偏移量,可正可负,正数表示向后移动offset位,负数表示向前移动offset位。

    f = open('hanfei',mode='r+',encoding='utf-8')  #博客园good!good!good!day day up!good!good!good!~~~good!~~~我是
    # print(f.read(3))#博客园   #读出来的都是字符
    f.seek(3) #seek设置光标 是按照字节取的,utf-8里,3个字节表示一个中文,1个字节表示一个英文字符
    count=f.tell()  #tell 告诉你光标的位置
    print(count) #3 光标的位置
    
    print(f.read())
    f.close()
    f.readable() #判断是否可读 返回T or F
    line=f.readline() #一行一行s的读
    line=f.readlines() #每一行当成一个元素,添加到列表中例如['asd
    ', '123
    ', '4444']
    
    print(line)
    for line in f:  #对文件中内容循环打印出来,不要全部读出来,要限制字符数量f.read(1000)
    print(line) #abc12

    f.close()

    截取

    f.truncate(5) #截取到第5位

    当open文件的时候,最后都要加上close.还有另外一种方法不用close关闭文件 with open

    with open('hanfei',mode='r+',encoding='utf-8') as f1,
            open('hanfei',mode='w+',encoding='utf-8') as f2:
    
        for line in f1:
            print(line)
    
    with open('test',mode='w+',encoding='utf-8') as f1,
            open('test',mode='r+',encoding='utf-8') as f2:
        f1.write('asd
    123
    4444')
        f1.seek(0)
        print(f1.read())
    
        # print(f2.readlines()) #['asd
    ', '123
    ', '4444']
        f2.seek(2,0) #从头开始读,光标在第二位 #d
        print(f2.read())

    练习题:登录注册、用户名密码储存到文件中

    #需求:注册的时候把用户名密码储存到文件中
    username = input('请输入您要注册的用户名:')
    password = input('请输入要设置的密码:')
    with open('user_of_info', mode='w', encoding='utf-8') as f:
        f.write('{usmn}
    {passwd}'.format(usmn=username, passwd=password))
        f.seek(0)
        print(f.read(), type(f.read()))  # hanfei 1234
    
    
    i=0
    lis=[]
    while i <3:
            user = input('请输入您的用户名:')
            pwd  = input('请输入密码:')
            with open('user_of_info',mode='r+',encoding='utf-8') as f1:
                for line in f1:
                    lis.append(line)
                    #print(lis)
            if user.strip() ==lis[0].strip() and pwd.strip()==lis[1].strip() :
                print('登陆成功!')
                break
    
            else:
                print('用户名或密码错误,请重试')
    
            i+=1
    #文件处理

    #打开文件
    #open('路径','打开方式','指定编码方式')
    #打开方式 r w a r+ w+ a+ b #不写的话(默认是read)
    #r+ 打开文件直接写 和 读完在写 (光标位置不同)
    # 建议读的时候就读,写的时候就写,只能单独的方式去操作文件


    #操作文件
    #读
    #read 一次性读
    #readline #一行一行读
    #不知道在哪儿结束
    #视频、图片用rb 读,按照字节读取
    #for循环--最好

    #写
    #write
    # 换行
    #光标——文件指针
    #seek 指定光标移动到某个文职
    #tell
    #truncate

    #关闭文件
    # close
     修改文件: 文件是不能修改的
    
    # (只能先把文件读出来,在写到另一个文件中,把旧文件删除,新文件重命名为原文件名)
    f = open('小护士班主任',mode='w',encoding='utf-8')
    f.write('班主任:星儿
    小护士:金老板')
    
    
    with open('小护士班主任',mode='r',encoding='utf-8')as f,
            open('小护士班主任.bak',mode='w',encoding='utf-8') as f2:
        for line in f:
            if '星儿' in line:
                line = line.replace('星儿','阿娇')
    
            f2.write(line)
    
    #删除文件和重命名文件 导入os模块
    import os
    os.remove('小护士班主任') #删除文件
    os.rename('小护士班主任.bak','小护士班主任') #重命名




  • 相关阅读:
    原则之读书笔记(生活篇)
    为 Nginx 添加 HTTP 基本认证(HTTP Basic Authentication)
    Linux搜索所有文件中的内容
    Js实现Table动态添加一行的小例子
    Android必学之数据适配器BaseAdapter
    技术共享之常见的6中种方法检测手机是否是虚拟机
    修改MySql数据库的默认时
    space.php
    self.location.href
    宝塔搭建laravel所需要的lnmp环境linux-nginx-mysql-php-composer-git
  • 原文地址:https://www.cnblogs.com/hanfe1/p/10315405.html
Copyright © 2020-2023  润新知