计算机基础知识 10

文件的基本操作

1. 我们能够操作哪些类型的文件:    .txt 没有后缀名的文件
    # 我们现在不能操作word、Excel、PPT等文件暂时不能够操作

    但是可以用numpy、pandas等模块可以操作

2.操作文件:打开文件(open)、 读或者写和关闭文件

打开文件:open('要操作的文件路径', '读写模式', '字符编码') 
#文件路径:也分为相对路径和绝对路径     # 'D:\Python27\day10\a.txt'

# 当路径中出现了字母和斜杠的组合会产生一些特殊的含义,所以我们应该给去掉:r或//

返回的是文件句柄---文件句柄:f   #打开和关闭文件都是操作系统打开,而f是操作系统给的

f= open(r'D:\Python27\day10\a.txt', 'r', encoding='utf-8')      # \n \t 

读取文件:print(f.read())      # 类似于是文件的内置方法
关闭文件:f.close()    

3.第二种方式来操作文件:

# with上下文管理器打开文件!    特点就:能够自动关闭文件,不用close
# as:起别名,赋给f

with open('a.txt', 'r', encoding='utf-8') as f :
    print(f.read())          # f=open('a.txt', 'r', encoding='utf-8')      
    f.close()

文件的读写模式:r、w、a

r:只读模式

f = open('a.txt', 'r', encoding='utf-8') 
#当文件路径不存在的时候,会直接保错
print(f.read())
f.close()

w:只写模式
"""写模式的特征: 
    1. 当文件路径不存在的时候, 会新建出来一个文件,而不报错
    2. 写模式会把原来的数据覆盖掉,从新写入新的数据(重要)

    3.在写模式没中断情况下可以在一直写
"""

with open('b.txt', 'w', encoding='utf-8') as f:
# pass  为了不全语法结构
    f.write('hello')
    f.write('hahahahhah')
    f.write('jerry')

a(append):追加模式

"""追加模式:当路径不存在的时候,也会新建出来文件
    记住:它是追加写,而不是覆盖原来的内容! ''''''

with open('c.txt', 'a', encoding='utf-8') as f:
    f.write('hello world')
    f.write('hello world1')
    f.write('hello world2')
    f.write('hello world3')
    f.write('hello world4')
    f.write('hello world5')

读写操作相关的方法

# 读系列:

with open('a.txt', 'r', encoding='utf-8') as f:
     print(f.read())        # read方法是一次性读取文件中得所有数据
     print(f.readline())    # helloworld1  一次读一行
     print(f.readlines())   # 一次性读取文件的所有内容,返回的数据类型是:列表
     """['hello/n', 'hello/n', 'hello/n']"""
     print(f.readable())    # able ation un multi ... 判断是否可读

# 写系列:
    ### 做后端程序员:最重要的是安全意识

with open('a.txt', 'w', encoding='utf-8') as f:
        f.write('jerry say hello ')
        f.writelines(['hello\n', 'jerry\n', 'kevin\n', 'jason\n'])
        print(f.writable())      # 判断是否可写
       

文件的读操作优化

with open('a.txt', 'r', encoding='utf-8') as f:
    print(f.read())  # 一次性读取文件的所有数据,并且光标在文件的末尾,如果在去读,就读不到了
    print(f.read())  # 第二次已经读不了了
"""当数据比较多的时候,会出现内存溢出,这种情况是坚决不能出现的"""

如何优化以上操作: 文件句柄 f 是支持for循环的

with open('a.txt', 'r', encoding='utf-8') as f:
     for line in f:     # line: 就是文件的一行内容
         print(line)    # 一行行读,不再一次性

# 了解的方法: f.flush()  # 把数据从内存中立刻刷到磁盘

课堂练习题:注册登录功能

##练习1:

写一个简易版本的注册和登录功能
    # 只需要实现一次注册和登录即可------------->单用户的注册
注册
    # 注册的用户数据需要写在文件里面
登录
    # 比较的用户名和密码要从文件中读取

# 注册功能
username = input('username:').strip()
password = input('password:').strip()     # 需要用户名和密码
data = '%s|%s' % (username, password)     # 组织成特殊的格式保存在文件里
with open('userinfo.txt', 'w', encoding='utf-8') as f:   # 直接写数据到文件里
# 写文件的时候,写入的数据类型必须是字符串和二进制
    f.write(data)
print('%s注册成功' % username) 

# 单用户的登录功能
username = input('username:>>>').strip()
password = input('password:>>>').strip()
with open('userinfo.txt', 'r', encoding='utf-8') as f:
    data = f.read()
real_username, real_password = data.split('|')  # 可以直接使用解压赋值拿到真实的有用户名和密码
if username == real_username and password == real_password:
    print('登录成功')
else:
    print('用户名或者密码错误')

##进阶练习2

多用户的注册功能和多用户数据情况下的登录功能

多用户的注册:
    1. 可以在程序不结束的情况下注册多个用户
    2. 需要验证用户名不能重复
    3. 注册的多用户的用户名和密码如何存储?     # 放在一个文件中,只不过是换行存储

## 多用户注册
while True:
    username = input('username:').strip()
    password = input('password:').strip()
    with open('userinfo.txt', 'r', encoding='utf-8') as f:
        for line in f:   # 逐行读取数据
            real_username, real_password = line.split('|')            
            if real_username == username:     # 判断
                print('用户名已经存在')
                break
        else:
            data = '%s|%s\n' % (username, password)    # 组织数据成特殊的格式
            with open('userinfo.txt', 'a', encoding='utf-8') as f:
                f.write(data)                     # 把用户名和密码写入到文件中
            print('%s 注册成功' % username)

## 多用户登录
with open('userinfo.txt', 'r', encoding='utf-8') as f:
    for line in f:     # line : jerry|123
        real_username, real_password = line.split('|')    # ['jerry', '123\n']       
        if real_username == username and password == real_password.strip('\n'):
            print('登录成功')
            break
        else:
            print('用户名或者密码不正确')     

整合代码

代码启动之后,给用户展示功能编号:
    1. 注册功能
    2. 登录功能

while True:
    print("""
        1. 注册功能
        2. 登录功能
    """)
    cmd = input('请输入你要执行的功能编号:').strip()
    if not cmd.isdigit():continue
    if cmd == '1':
        while True:            
            username = input('username:').strip()    # 1. 用户输入用户名和密码
            password = input('password:').strip()
            with open('userinfo.txt', 'r', encoding='utf-8') as f:    #验证用户名是否存在
                    for line in f:        # 逐行读取数据                   
                    real_username, real_password = line.split('|')  # line:kevin|123                    
                    if real_username == username:   # 判断
                        print('用户名已经存在')
                        break
                else:                     
                    data = '%s|%s\n' % (username, password)   # 2. 组织数据成特殊的格式                   
                    with open('userinfo.txt', 'a', encoding='utf-8') as f:
                        f.write(data)             # 3. 把用户名和密码写入到文件中
                    print('%s 注册成功' % username)

    elif cmd == '2':
        username = input('username:>>>').strip()
        password = input('password:>>>').strip()        
        with open('userinfo.txt', 'r', encoding='utf-8') as f:
            for line in f:    # line : jerry|123               
                real_username, real_password = line.split('|') # ['jerry', '123\n']
                if real_username == username and password == real_password.strip('\n'):
                    print('登录成功')
                    break
                else:
                    print('用户名或者密码不正确')

文件的操作模式

#文本模式:默认就是操作字符串,文本
    t:text
    # r w a =====> rt wt at
特征:1. encoding参数必须指定
           2. 读取的所有的数据都是以字符串为单位的
           3. t模式只能够读取文本或者字符模式

# 二进制模式:b模式:binary

with open('userinfo.txt', 'rb') as f:
    pass 

特征:1. encoding='utf-8'参数不能够指定
           2. 读取的数据全部以字节为单位
           3. 二进制模式可以读取任意类型的文件

           4.b模式中得b不能省略------------> rb wb ab

作业:拷贝功能

写一个建议版本的拷贝功能:

1. 代码运行之后输入被拷贝的文件路径
2. 代码运行只会还要在输入你把此文件拷贝到哪个位置去(思路再写)

inter = input('请输入您的路径>>>')
new_inter = input('请输入您想拷贝到的路径>>>')
f = open(r'%s' %inter, 'rb')
with open(r'%s' %new_inter, 'wb') as f1:
    for line in f:
        f1.write(line)
        print(----'您的文件已被拷贝---')
        break

今日思维导图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值