首页 > 其他分享 >主题:文件相关操作

主题:文件相关操作

时间:2023-07-17 16:13:32浏览次数:31  
标签:username 文件 用户名 encoding 主题 print 操作 txt open

文件的基本操作

# 三步骤
	1. 打开文件
    2. 操作文件
    3. 关闭文件
关键字:open
# f=open(r'a.txt', 'r', encoding='utf-8')
# f = open(r'a.txt', mode='r', encoding='utf-8')
# print(f)  # 操作系统打开的文件
#
# # 操作文件:读、写
# res = f.read()
# print(res)
#
# # 关闭文件:释放资源的
# f.close()

# 方式2:
# with上下文管理器
# with open('a.txt', 'r', encoding='utf8') as f:
#     print(f.read())
# 面向对象中会讲原理:先死后活

文件的读写模式

r:read(读)
w:write(写)
a:append(追加写)
    # 读模式
# 1. 路径不存在,直接保存
# with open('a.txt', 'r', encoding='utf8') as f:
#     pass


# 2. 路径存在
# with open('a.txt', 'r', encoding='utf8') as f:
#     print(f.read())


# 写模式
# 1. 路径不存在的, 会自定创建出来文件
# with open('a.txt', 'w', encoding='utf8') as f:
#     pass

'''我们真正的代码以后是要运行在Linux系统里面去的,服务器:一台计算机,Linux系统(centos、Redhat等),去阿里云或者腾讯云上去买.'''
# 2. 路径存在
# 把文件内的原本数据情况掉,从新写入,覆盖!!!
# w模式很危险,
# with open('a.txt', 'w', encoding='utf8') as f:
#     # f.write('hello big baby!')
#     f.write(str(123))  # 写文件的数据类型必须是字符串类型,和字节类型,其他类型都不能直接写入,


# 3. 追加模式
# 3.1 路径不存在,会自动创建文件出来
# with open('a.txt', 'a', encoding='utf8') as f1:
#     # f1.write('hello baby!')
#     pass

# 路径存在,在文件的原来数据后面继续追加新的内容
with open('a.txt', 'a', encoding='utf8') as f1:
    f1.write('hello baby!\n')

文件的操作方法

1. 读系列
# 1. 读系列
with open('a.txt', 'r', encoding='utf8') as  f:
    # print(f.read())
    # 一次读取文件的一行内容,一行一行读取
    # print(f.readline()) # hello worldhello baby!hello baby!
    # print(f.readlines())  # ['hello world\n', 'hello baby!\n', 'hello baby!\n', 'hello baby!\n']
    # 判断文件是否可读
    print(f.readable()) # True

2. 写系列
# 2. 写系列
with open('a.txt', 'w', encoding='utf8') as f:
    # f.write('hello baby')
    # f.write(str(123)) # 只能写字符串
    # print(f.writable()) # True
    # print(f.readable()) # False
    f.writelines(['hello\n', 'world\n', 'kevin', 'jack'])

文件的读操作优化

with open('a.txt', 'r', encoding='utf8') as f:
    '''
        read方法它是一次性读取文件的所有内容,所以,当文件内容非常大的时候,有可能会造成内存溢出
        我们不允许内存溢出的情况出现,但是当文件内容非常小的时候,无所谓了,
        
        针对上述出现的问题,如何解决呢?
    '''
    # print(f.read()) # 一次性把文件中的内容读取完毕
    # print(f.read())
    # print(f.read())
    # print(f.read())
    # 变量f它值支持for循环的
    for line in f:
        print(line)  # for循环就是一行一行的读取内容的
        '''所以,以后读文件的时候,如果觉得文件很大,我们就是要for循环一行一行的读取'''

课堂练习

1. 简易版本的注册与登录功能:用户的数据要保存在文件里面
	# 只注册一次
    '''把用户的用户名和密码给保存起来,登录就是使用用户注册时候保存的用户名和密码进行比较'''
# 1. 注册功能:数据需要保存在文件里

# 1.1 让用户输入用户名和密码
username = input('请输入你的用户名>>>:').strip()
password = input('请输入你的密码>>>:').strip()

# 2. 把用户名和密码保存到文件里
res = '%s|%s' % (username, password)
# format
with open('userinfo.txt', 'w', encoding='utf8') as f:
    f.write(res)
    print('%s:注册成功' % username)
    
2. 简易版本的登录功能
# 2. 简易版本的登录功能
# 2.1 让用户输入用户名和密码
username = input('请输入你的用户名:').strip()
password = input('请输入你的密码:').strip()

# 3. 先读取文件,然后从文件中获取真实的用户名和密码
with open('userinfo.txt', 'r', encoding='utf8') as f:
    data = f.read()  # tank|123

# 4. 处理字符串,处理成列表的形式,切分
res = data.split('|')  # res: ['tank', '123']
# real_username, real_password = data.split('|')  # res: ['tank', '123']

# 5. 比较用户名和密码是否正确
if username == res[0] and password == res[1]:
    print('登录成功')
else:
    print('用户名或者密码错误')

多用户注册和多用户下的登录功能

# 多用户注册功能:
while True:
    username = input('请输入你的用户名>>>:').strip()
    password = input('请输入你的密码>>>:').strip()

    # 3. 验证用户名是否已经存在
    with open('userinfo.txt', 'r', encoding='utf8') as f1:
        for line in f1:
            # line: kevin|123
            if username == line.split('|')[0]:
                print('用户名已经存在')
                break
        else:
            # 2. 把用户名和密码保存到文件里
            res = '%s|%s\n' % (username, password)

            # format
            with open('userinfo.txt', 'a', encoding='utf8') as f:
                f.write(res)
                print('%s:注册成功' % username)

 # 2. 多用户下的登录功能
# 多用户下的登录功能
# 1. 让用户输入用户名和密码
username = input('请输入你的用户名:').strip()
password = input('请输入你的密码:').strip()

# 2. 从文件里读取用户名和密码
with open('userinfo.txt', 'r', encoding='utf8') as f:
    for line in f:
        # line: jason|123
        data=line.split('|')  # ['kevin', '123\n']
        # real_username, real_password = line.split('|')  # ['kevin', '123\n']
        # real_password.strip('\n')
        # 判断用户名和密码
        if username == data[0] and password == data[1].strip('\n'):
            print('登陆成功')
            break
        else:
            print('用户名和密码错误')

代码整合

#### 代码整合:
while True:
    print("""
        1. 注册功能
        2. 登录功能
    """)

    choice = input('请输入你要执行的序号:').strip()
    if not choice.isdigit():
        print('请好好输入,我们没有这个功能')
        continue
    # 验证序号在1、2范围之内
    if choice == '1':
        # 注册功能
        while True:
            username = input('请输入你的用户名>>>:').strip()
            password = input('请输入你的密码>>>:').strip()

            # 3. 验证用户名是否已经存在
            with open('userinfo.txt', 'r', encoding='utf8') as f1:
                for line in f1:
                    # line: kevin|123
                    if username == line.split('|')[0]:
                        print('用户名已经存在')
                        break
                else:
                    # 2. 把用户名和密码保存到文件里
                    res = '%s|%s\n' % (username, password)

                    # format
                    with open('userinfo.txt', 'a', encoding='utf8') as f:
                        f.write(res)
                        print('%s:注册成功' % username)
    elif choice == '2':
        # 登录功能
        username = input('请输入你的用户名:').strip()
        password = input('请输入你的密码:').strip()

        # 2. 从文件里读取用户名和密码
        with open('userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:
                # line: jason|123
                data=line.split('|')  # ['kevin', '123\n']
                # real_username, real_password = line.split('|')  # ['kevin', '123\n']
                # real_password.strip('\n')
                # 判断用户名和密码
                if username == data[0] and password == data[1].strip('\n'):
                    print('登陆成功')
                    break
                else:
                    print('用户名和密码错误')

main.py(主程序)

import register
import login
import logout

while True:
    choice = input("请选择操作:1.注册 2.登录 3.退出\n")
    if choice == "1":
        register.register()
    elif choice == "2":
        if login.login():
            while True:
                choice2 = input("请选择操作:1.注销 2.退出登录\n")
                if choice2 == "1":
                    logout.logout()
                    break
                elif choice2 == "2":
                    break
    elif choice == "3":
        break
    else:
        print("输入有误,请重新输入!")

文件的操作模式

t模式:text文本
	r   >>>  rt
    w   >>>  wt
    a   >>>  at

   """
   		1. 它是以字符串位基本单位
   		2. 它只能操作字符串形式
   		3. encoding参数必须写
   """

b模式:bytes二进制模式
	r    >>>  rb
    w    >>>  wb
    a    >>>  ab
 """
 	1. b不能省略,必须写 rb
 	2. 它可以操作任意的数据类型:视频、音频、图片等都可以
 	3. encoding参数必须不能写
 	4. 它的数据以字节为单位了
 """

标签:username,文件,用户名,encoding,主题,print,操作,txt,open
From: https://www.cnblogs.com/huangchunfang/p/17560390.html

相关文章

  • 文件内指针的移动 、内数据的修改 、函数(次函数非数学中的函数)(非常重要)
    文件的操作模式"""1.如果是t模式,read里面写的数字代表的是读取的字符个数2.如果是b模式,read里面写的数字代表的是读取的字节个数3.一个字节代表一个英文字符4.一个中文字符使用三个字节保存"""#withopen('a.txt','r',encoding='utf8')asf:#......
  • Linux磁盘专题-linux文件系统详解
    这可是我几年前的杰作笔记呀.....当初手写计算都会,现在忘光光....物理硬盘Block的概念和作用硬盘底层一次IO就是读、写一次扇区,一个扇区默认是512Byte。读写大量文件如果以扇区为单位会很慢、性能不好,所以出现了逻辑块的概念(logicblock),也就是硬盘Block。逻辑块Block是......
  • 创建文件夹和删除问价夹的工具类
    一、对于文件夹的创建和删除工具类importcn.hutool.core.util.StrUtil;importlombok.extern.slf4j.Slf4j;importjava.io.File;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;/***@Description:*@Date:2023/6/3*@Auth......
  • 前端实现浏览器端大文件分片上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求         <formid="postForm"action="${pageContext.request.contextPath}/UploadServlet"method="post"e......
  • .net6操作mqtt
    .net6操作mqtt客户端usingMQTTnet.Client;usingMQTTnet.Protocol;usingMQTTnet;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceSendMessageMqttClinet{publicclassMqttServ......
  • MySQL中对JSON数据操作(较全)
    MySQL对JSON数据操作链接:(160条消息)【MySQL】对JSON数据操作(全网最全)_mysqljson_0世界和平0的博客-CSDN博客创建json格式字段CREATETABLE`dept`(`id`int(11)NOTNULL,`dept`varchar(255)DEFAULTNULL,`json_value`jsonDEFAULTNULL,PRIMARYKEY(`id......
  • class文件的加载过程
    1、在加载class文件的时候,JVM会先加载类中的所有静态成员(方法,变量,静态代码块)都加载到方法区class文件的所处静态区中2、当把所有的静态成员加载完成之后,开始给类中的所有静态成员变量进行默认初始化3、当类中的所有静态成员变量默认初始化之后,接着开始给所有静态成员变量显示赋......
  • java执行jar文件
    如何在Java中执行JAR文件作为一名经验丰富的开发者,我很乐意教你如何在Java中执行JAR文件。执行JAR文件是一种常见的操作,它允许你在Java虚拟机(JVM)上运行打包好的Java应用程序。下面是整个过程的步骤概述:步骤描述1定位并获取JAR文件2创建一个执行JAR文件的运行配置......
  • java展示指定路径文件
    Java展示指定路径文件作为一名经验丰富的开发者,我将教会你如何使用Java展示指定路径下的文件。首先,我将向你展示整个流程,并提供每个步骤所需的代码以及这些代码的注释。流程下面是展示指定路径文件的流程:步骤描述步骤1获取指定路径步骤2遍历指定路径下的文件......
  • java在指定目录下创建文件
    如何在指定目录下创建文件作为一名经验丰富的开发者,我将向你介绍如何在Java中实现在指定目录下创建文件的过程。下面是一个简单的流程表格,展示了实现该任务的步骤:步骤描述步骤1检查指定目录是否存在步骤2如果目录不存在,则创建目录步骤3创建文件步骤4在文件......