首页 > 其他分享 >文件操作基础

文件操作基础

时间:2022-10-09 15:46:08浏览次数:41  
标签:文件 name 基础 模式 input 操作 txt open

目录

文件操作基础

文件操作

文件是操作系统暴露给用户操作硬盘的快捷方式

代码打开文件的两种方式

直接打开模式
open(r'文件路径','打开模式')  # 建议加上r
上下文管理模式推荐使用这个
with open(r'文件路径','打开模式') as f,open(r'文件路径','打开模式') as f2:
    #子代码 上下文支持同时打开多个文件以逗号分隔

文件读写

'r'读
只读不能写
    文件不存在报错
    文件存在正常读取
with open(r'a.txt','r','utf-8') as f
	f.read()
'w'写
只写不能读
	文件不存在创建文件打开
    文件存在清空文件内容
with open(r'a.txt','w','utf-8') as f
	f.write('追加数据')
'a'追加
只在在文件最后写入数据
	文件不存在创建文件
    文件存在在最后追加数据
with open(r'a.txt','a','utf-8') as f
	f.write('我在最后')

文件操作模式

open 默认打开模式为文本模式 rt wt at 
文本模式
	rt wt at 
    只能操作文本文件
    文本模式读写以字符为单位
	需要指定打开编码 encoding='utf-8' 如果不指定者使用计算机默认编码
二进制模式
	rb wb ab
    什么文件都能操作
    读写以字节为单位
    不能指定打开编码,因为已经是二进制模式了
二进制模式与文本模式针对路径是否存在的情况下 规律是一样的

文件的方法

读方法
1.read()
	一次性读取文件所有数据并且光标停在最后 继续读取则没有内容
	并且当文件内容比较多的时候 该方法还可能会造成计算机内存溢出
    括号内还可以写数字 在文本模式下以字符为单位,表示读取几个字符 在字节模式下,表示读取几个字节
2.for循环
	一行一行读取文件避免内存溢出现象的产生
3.readline()
	一次读取一行
4.readlines()
	一次读取所有行,按照行数,放在一个列表里
5.readable()
	检查是否可读
写方法
1.write()
	写入数据
2.writelines()
	传入列表,一次性将列表的所有数据写入文件
3.writeable()
	检查文件是否可写
4.fluse()
	立即将内存的数据刷入到文件,等于ctrl + s

文件内光标的移动

seek()
两个参数
第一个参数是偏移量
	都是以字节偏移
第二个参数是,参考位置
	0 文本二进制都可用为文件头
    1 只能二进制当前光标的位置
    2 只能二进制文件末尾位置

tell()
返回当前光标距离文件头的距离

文件光标实战

import time

with open('b.txt', 'rb') as f:
   f.seek(0,2)
   while True:
       res = f.readline()
       if len(res) > 0:
           print(res.decode('utf-8'))
       time.sleep(0.5)

作业

'''
1.编写简易版本的拷贝工具
     自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
     任何类型数据皆可拷贝
     ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
'''
# old_file_path = input('需要拷贝的文件路径')
# new_file_path = input('需要拷贝到的文件路径')
# # 第一种方法
# # with open(fr'{old_file_path}', 'rb') as f1, open(fr'{new_file_path}', 'wb') as f2:
# #     f2.write(f1.read())


# 第二种
# import os
# with open(fr'{old_file_path}', 'rb') as f1:
#     data = f1.read()
# with open(fr'aa.txt','wb') as f2:
#     f2.write(data)
# os.remove(fr'{old_file_path}')
# os.rename(fr'aa.txt',fr'{new_file_path}')



'''     
2.利用文件充当数据库编写用户登录、注册功能
  文件名称:userinfo.txt
  基础要求:
  		 用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
  拔高要求:
       用户可以连续注册
      用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
    提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
'''
while True:
    print('''
    1.注册
    2.登录
    ''')
    input_num = input('请输入编号')
    import os
    if not os.path.exists(r'a.txt'):
        open('a.txt','w').close()
    if input_num == '1':
        with open(r'a.txt', mode='r', encoding='utf-8') as f1:
            while True:
                name = input('用户名q')
                if name.upper() == "Q":
                    break
                pwd = input('密码')
                for i in f1:
                    if name in i:
                        print(f'{name}用户名存在')
                        break
                else:
                    with open(r'a.txt',mode='a',encoding='utf-8') as f2:
                        f2.write(f'{name}|{pwd}\n')
                    print(f'{name}注册成功')
    elif input_num == '2':
        with open(r'a.txt', mode='r', encoding='utf-8') as f1:
            while True:
                name = input('用户名')
                if name.upper() == 'Q':
                    break
                pwd = input('密码')
                for i in f1:
                    data = i.split('|')[0]
                    if name == i.split('|')[0] and pwd == i.split('|')[1].strip():
                        print(f'{name}登录成功')
                        break
                else:
                    print('登录失败')
    else:
        print('输入有误请重新输入')

标签:文件,name,基础,模式,input,操作,txt,open
From: https://www.cnblogs.com/clever-cat/p/16772369.html

相关文章

  • redis中的zset数据类型的基本操作
    1、首先连上你的redis以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示2、zset相关操作说明:redis的zset是通过哈希表实现的,所以添加、删除、查找......
  • 6.公共操作与推导式
    一:公共操作运算符公共⽅法容器类型转换运算符运算符描述支持的容器类型+合并字符串,列表,元组*复制字符串,列表,元组in是否存在字符串,列表,元组,字......
  • docker 下nginx 实现文件下载
     1、新建目录存放文件 2、将目录挂载到容器,新增配置如下  3、nginx配置文件新增配置location~*(.*.apk){#代理后缀为apk的文件add_h......
  • SQL基础语句入门
    SQL语句入门起因学校开设数据库相关的课程了,打算总结一篇关于基础SQL语句的文章。SQL介绍SQL最早版本是由IBM开发的,一直发展到至今。SQL语言有如下几个部分:数据定义......
  • ES Restful操作
    一、restful风格介绍二、索引增删改查1、增加索引命令:put索引名称/文档类型/文档idPUTtest/user/1{"name":"张三","age":12,"dec":"测试一下"}字段也是可以自己......
  • 2022-2023-1 20221415 《计算机基础与程序设计》第六周学习总结
    2022-2023-120221415《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)这个作业要求在哪......
  • 显示文件名的后缀名(保姆级)
    1、随便打开一个文件夹  上方  工具->文件夹选项->(上方)查看->(找到) 隐藏已知文件类型的扩展名 把√去掉点确认就好了     ......
  • centos7 编译cpp报错 /usr/include/c++/4.8.2/iostream:38:28: 致命错误:bits/c++confi
    解决方法:升级gcc编译器 Centos7升级gcc安装centos-release-scl安装devtoolset 注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推sudoyuminstallcentos-re......
  • Linux文件操作命令touch
    touchtouch[filename]创建文件,参数可以跟多个如果要创建50个有规律的文件,例如text1-text50利用参数扩展touchtest{1..50}touchtest{a..e}touchtest{a..e}_{......
  • linux磁盘已满,查看哪个文件占用多
    1.使用df-h查看磁盘空间占用情况2.使用sudodu-s-h/*|sort-nr命令查看那个目录占用空间大3.然后那个目录占用多再通过sudodu-s-h/var/*|sort-nr一层层......