• Python基础 之 文件操作


    文件操作

    一、路径

    文件绝对路径:d:python.txt

    文件相对路径:在IDEA左边的文件夹中

    二、编码方式

    utf-8 gbk...

    三、操作方式

    1.只读

    r 和 rb

    绝对路径的打开操作
    f = open('d:even.txt',mode='r',encoding='UTF-8')
    content = f.read()
    print(content)
    f.close()
    #test
    #简单的文件操作示例
    
    在idea文件夹中打开操作
    f = open('even',mode='r',encoding='UTF-8')
    content = f.read()
    print(content)
    f.close()
    
    f = open('even',mode='rb')    #以rb方式打开,后面则不用再跟encoding='UTF-8'
    content = f.read()
    print(content)
    f.close()
    #b'ideaxe4xb8xadxe7x9ax84xe7xa4xbaxe4xbex8b'
    *** 以什么编码方式储存的文件,就以什么编码打开进行操作。

    2.只写 

    w 和 wb

    #对于w,没有此文件就会创建文件
    
    f = open('log',mode='w',encoding='utf-8')    #log为创建的文件名
    f.write('创建测试')    #创建文件要写入的的内容
    f.close()

    3.追加内容

    a 和 a+ 

    #a
    f = open('log',mode='a',encoding='utf-8')    #log为需要追加的文件名
    f.write('佳琪')    #追加要写入的的内容
    f.close()
    
    #a+
    f = open('log',mode='a+',encoding='utf-8')
    f.write('77777')
    f.seek(0)
    print(f.read())
    f.close()

    ***** 4.读写

    r+  和  r+b

    f = open('log',mode='r+',encoding='utf-8')
    print(f.read())        #先读
    f.write('大,小')    #后写
    f.close()
    
    #如果在r+的模式下先写后读,会将此次写入的字符从这个文件开始进行覆盖写入
    f = open('log',mode='r+',encoding='utf-8')
    f.write('大,小')    #先写
    print(f.read())        #后读
    f.close()

    5.写读

    w+ 和 w+b

    f = open('log',mode='w+',encoding='utf-8')
    f.write('66666')    #先写
    f.seek(0)            #调整光标位置至开始 
    print(f.read())        #后读
    f.close()
    #66666

    *** 文件操作之后 一定要加.close()
    如果不加。可能未写入磁盘,导致文件部分丢失。
    因为操作完,数据大多在内存里。
    例如把word写上十几页后,直接把电脑关闭了。

    *****最常用的
    r+

    四、文件操作功能详解

    1.seek 和 tell

    seek:按照字节定光标的位置

    tell:告诉你光标的位置

    obj = open('log',mode='r+',encoding='utf-8')
    content = f.read(3)  # 读前3个字符
    f.seek(3)  # 按照字节定光标的位置
    f.tell() # 告诉你光标的位置
    print(f.tell())
    content = f.read()
    print(content)
    seek 和 tell

    2.readline 和 readlines

    line = f.readline()  # 一行一行的读
    line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中

    3.readable

    f.readable()  # 是否可读

    4.打开多个

    with open('log',mode='r+',encoding='utf-8') as obj:
        print(obj.read())
    #f.close() 该格式可不写f.close(),自动关闭
    
    #可以打开多个,且末尾不用加close
    with open('log',mode='r+',encoding='utf-8') as f1,
            open('log',mode='r+',encoding='utf-8') as f2:
        print(f1.read())
        print(f2.read())

    5.删除和重命名

    修改文件的本质是先创建一个文件的bak然后进行修改,再删除源文件,再将bak文件重命名为源文件名

    with open('even',encoding='utf-8') as f,open('even.bak','w',encoding='utf-8') as f2:
        for line in f:
            if '苹果' in line:  #even中的内容:苹果
                line = line.replace('苹果','梨子')
            #写文件
            f2.write(line) 
    import os
    os.remove('even') #删除文件
    os.rename('even.bak','even')  #重命名文件 将even.bak重命名为even

     五、练习

     注册和登录

    username = input('请输入你要注册的用户名>>>')
    password = input('请输入你要注册的密码>>>')
    
    with open('list_of_info',mode='w',encoding='utf-8') as f:   #跟上面绿色注释的代码等效,末尾不用加close()
        f.write('{}
    {}'.format(username,password))
    print('恭喜您,注册成功')
    lis
    = [] i = 0 while i < 3: usn = input('请输入你的用户名:') pwd = input('请输入你的密码:')
    with open(
    'list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line)
    if usn == lis[0].strip() and pwd == lis[1].strip(): print('登录成功') break else:print('账号或密码错误') i+=1
    username = input('请输入你要注册的用户名>>>')
    password = input('请输入你要注册的密码>>>')
    
    f = open('list_of_info2',mode='w',encoding='utf-8')
    f.write('{}
    {}'.format(username,password))
    f.close()
    # with open('list_of_info',mode='w',encoding='utf-8') as f:   #跟上面代码等效,末尾不用加close()
    #     f.write('{}
    {}'.format(username,password))
    
    print('恭喜您,注册成功')
    lis = []    #定义一个空的list类lis
    i = 0       #定义一个变量i为0,作为次数限制
    while i < 3:    #定义一个while循环 i < 3来限制错误次数
        usn = input('请输入你的用户名:')    #重新定义新的input输入变量usn用来进行登录
        pwd = input('请输入你的密码:')      #重新定义新的input输入变量pwd用来进行登录
        
        f1 = open('list_of_info2', mode='r+', encoding='utf-8')
        f.close()
        
       #with open('list_of_info',mode='r+',encoding='utf-8') as f1:
        for line in f1:            #f1进行for循环并用line表示
            lis.append(line)       #将line添加至之前定义的空lis中
            
        if usn == lis[0].strip() and pwd == lis[1].strip(): #如果用户名和密码都能对应 则登录成功
            print('登录成功')
            break
        else:print('账号和密码错误')
        i+=1
    终极傻瓜注释版本
    
    
  • 相关阅读:
    我对NHibernate的感受(3):有些尴尬的集合支持
    NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
    NHibernate3.0剖析:Query篇之NHibernate.Linq增强查询
    30个优秀的后台管理界面设计案例分享
    NHibernate Session Flush的作用
    NHibernate 3 Extending the Linq Provider to fix some System.NotSupportedException
    Activity初步
    公司间交易学习笔记概述
    公司间交易学习笔记值映射
    BOM配置
  • 原文地址:https://www.cnblogs.com/evenyao/p/9163191.html
Copyright © 2020-2023  润新知