首页 > 其他分享 >文件操作/模式

文件操作/模式

时间:2022-10-08 23:44:57浏览次数:51  
标签:文件 encoding 模式 print 操作 txt open

目录

今日内容概要

  • 文件操作
  • 文件读写模式
  • 文件诸多方法
  • 文件内光标的移动
  • 练习题及答案

1.文件操作

1.文件的概念
    操作系统给用户操作硬盘的快捷方式
    比如我们双击打开一个文件,就是把硬盘中存储的数据加载到内存中
    ctrl+s(保存) 就是将内存中的数据存储到电脑硬盘中
2.代码打开文件的两种方式:
	1.变量名 = open('文件路径','读/写模式',encoding = 'utf8') 
      # 此模式打开后可以正常运行,但是会默认一直开启文件,需要在打一行代码进行关闭
    2.with open('文件路径','读/写模式',encoding = 'utf8') as 变量名:
      # 此模式打开文件后,执行缩进后的子代码完成后会自动关闭文件。
	  # 所以我们在编写代码时一般习惯使用第二种方式方法
3.
'''
文件路径的\符号容易与Python内方法冲突,所以我们在编写文件路径的时候最好在字符串引号前面添加一个r,让路径转义,这样可以避免我们误操作,导致python报错
'''    

2.文件读写模式

1.文件读写模式分为:
 	'r'  # 只读模式,只能读取文件内容,不能进行修改
	'w'  # 只写模式,只能编写内容到文件内,不能看
	'a'  # 追加模式,在文件内容末尾添加信息
	1.'r' 只读模式, 如果文件路径不存在,会直接报错
       with open('b.txt','r',encoding='utf8') as c:
       print(c.read())
    	如果文件存在,就会读取文件内的内容
        with open('a.txt','r',encoding='utf8') as d:
    	print(d.read())
	2.'w'只写模式, 如果文件路径不存在,那么会创建一份新的文件
    	with open('b.txt','w',encoding='utf8') as c:
    	c.write('我是天下第一大帅哥') 
        # 会自动创建一个b.txt文件,并且在文件内写入 '我是天下第一大帅哥'
        '''
        如果需要编写多行,需要自己添加换行符,并且在后续文件对比时也要注意换行符的存在
        w模式每次打开文件会先清空文件内容,然后在进行编写
        '''
    3.'a' 只追加模式,只在文件末尾添加数据,如果文件路径不存在,那么会创建一份新的文件
    	with open('a.txt','a',encoding = 'utf8') as b:
            b.write('是的你真帅')
            # 会在文件内容尾部添加是的你真帅
    4.pass 
	 pass 在python中的作业是为了保持语法结构的完整性
		if 条件:
    		pass (跳过,什么都不做)
    可以跳过需要执行子代码的条件/循环/...等
    		  # pass本身没有意义

3.文件操作模式:

1.文件操作模式
	1. t 文本模式
    	# 文本模式只能对文本类型文件进行操作
        # 必须制定encoding 对应编码
       # 读写是以字符为单位进行
    如上述文件读写操作都是以文本模式进行的操作,我们写读写模式时把t隐藏掉了
    完整的写完应该是:
    with open('a.txt','rt',encoding='utf8') as b:
    在读写模式后面加上t,代表我们所使用的文件操作模式
    2. b 二进制模式
    	# 如果需要使用二进制模式需要在读写模式后面加b,这样就可以代表是二进制模式
        # 可以对任意类型文件进行操作 (计算机本身就可以识别二进制)
        # 读写是以bytes类型为单位
       # 不需要encoding 对应编码
    	二进制模式的写法为:
        with open('a.txt','rb') as c:
    二进制模式,在'r','w','a'模式操作方式与文本模式操作方式一致

4.文件操作方法

1.read()
	只读方法,一次性读取文件内所有内容,并且光标/指针停留在内容末尾。
    文件内容比较多时,如果计算机内存不够读取文件内的数据,就会爆内存
    read()方法中可以填数字参数
    # 在文本模式表示读取几个字符
    # 在二进制模式表示读取几个字节
  	例:
    with open('a.txt','rb') as c:
    print(c.read())  # 读取所有字符
	with open('a.txt', 'r',encoding='utf8') as d:
    print(d.read())  # 读取所有字节
2.readline()
	只读一行方法:只读文件中的一行内容,并且光标/指针会停留在第一行内容末尾
with open('a.txt','r',encoding='utf8') as i:
     print(i.readline())  # 我是天下第一大帅哥
     print(i.readline())  # 是的你真帅
# 注意 我们在二进制模式读取时,他会有\n 换行符进行分割我们在使用readline()方法时要注意
3.readlines()
	读取文件所有内容,并根据每行进行分割  # 每行都有换行符!!
	with open('a.txt','r',encoding='utf8') as i:
    a = i.readlines()
    print(a)  # ['我是天下第一大帅哥\n', '是的你真帅']
    print(type(a))  # <class 'list'>
4.readable()
	判断文件是否可读,返回布尔值
    with open('a.txt','r',encoding='utf8') as i:
    print(i.readable())  # 返回True
5.write()
	写入数据
    with open('a.txt','w',encoding='utf8') as c:
    c.write('天下第一剑神,小白')
    # a.txt 原有内容清空,并输入  '天下第一剑神,小白'
6.writable()
	判断文件是否可写入内容,返回布尔值
    with open('a.txt','w',encoding='utf8') as c:
    print(c.writable())  # True
7.writelines()
	写入一个列表,列表内可写多行内容,换行需要使用换行符隔开
    with open('a.txt','w',encoding='utf8') as c:
    c.writelines(["就是牛 1\n", "还是牛 2"])  # 就是牛 1 还是牛 2
8.flush()
	用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
    ??
9.for循环
	for循环也可用于文件读取
    在读取文件时就可以一行一行的遍历出来,这样可以避免read()方法内存容纳不下被爆掉
10.文件内光标移动
    1.seek()
        seek方法可以用于移动文件读取指针/光标到指定位置。
        ()内参数为:
            offset,whence
          开始的偏移量  哪里(模式0,1,2) # 模式0 从头开始 模式1,从当前光标所处位置开始 模式2 从末尾开始
        with open('a.txt','rb') as c:
        c.seek(3,0)  # c.write('让我康康你的脸') 因为中文是三个字节
        print(c.read(6).decode('utf8'))  # read(6)读取偏移量0后6个字节并转码utf-8 我康
        c.seek(-9,2)  # 倒着取
        print(c.read(9).decode('utf8'))  # 你的脸
        whence参数 1,2 模式只支持b(二进制模式)使用,0模式t,b模式都可以使用
	2.tell()
    	tell 方法可以查询当前光标/指针所处位置 # 文本模式是字符,二进制模式是字节
            a = c.tell()
    		print(a)  # 9
	

5.练习题及答案

1.编写简易版本的拷贝工具
     自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
     任何类型数据皆可拷贝
     ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
        location = input('请输入您想要拷贝的数据路径>>>>>>:')
target_location = input('请输入您的目标数据路径>>>>>>:')
with open(r'{}'.format(location),'rb') as data:  # 打开想要拷贝的数据路径地址
    data1 = data.read()  # 获取读取的值复制给Data1
    location1 = location.split('\\')
    for b in location1:
        if '.' in b:
            data2 = b
            with open(r'{}\{}'.format(target_location,data2),'wb') as target_data: # 打开目标拷贝地址
                target_data.write(data1)  # 写入 data1
                print('拷贝成功哦,就是牛')
2.利用文件充当数据库编写用户登录、注册功能
  文件名称:userinfo.txt
  基础要求:
  		 用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
        while True:
    print('欢迎光临随风登录系统'
              '1.用户注册:'
              '2.用户登录')
    choice = input('请输入您想要选择功能>>>>>>:')
    if choice.strip() == '1':
        print('用户注册')
        with open('userinfo.txt','w',encoding='utf8') as data:
            username = input('请输入您的用户名>>>>>:')
            password = input('请输入您的密码>>>>>:')
            data.writelines(f'{username},{password}\n')
            print(f'{username}注册成功')
    if choice.strip() == '2':
        print('用户登录')
        target_username = input('请输入用户名>>>>>:')
        target_password = input('请输入密码>>>>>>:')
        with open('userinfo.txt', 'r', encoding='utf8') as data1:
            b = data1.readlines()
            for x in b:
                if target_username in x and target_password in x:
                    print(f'{target_username}登录成功')
                else:
                    print('用户名或密码输入错误')
  拔高要求:
       用户可以连续注册
      用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
    提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
        while True:
    print('欢迎光临随风登录系统'
              '1.用户注册:'
              '2.用户登录')
    choice = input('请输入您想要选择功能>>>>>>:')
    if choice.strip() == '1':
        print('用户注册')
        with open('userinfo.txt','a',encoding='utf8') as data:
            username = input('请输入您的用户名>>>>>:')
            password = input('请输入您的密码>>>>>:')
            data.writelines(f'{username},{password}\n')
            print(f'{username}注册成功')
    if choice.strip() == '2':
        print('用户登录')
        target_username = input('请输入用户名>>>>>:')
        target_password = input('请输入密码>>>>>>:')
        with open('userinfo.txt', 'r', encoding='utf8') as data1:
            b = data1.readlines()
            for x in b:
                if target_username in x and target_password in x:
                    print(f'{target_username}登录成功')
                else:
                    print('用户名或密码输入错误')

标签:文件,encoding,模式,print,操作,txt,open
From: https://www.cnblogs.com/ddsuifeng/p/16770701.html

相关文章

  • 设计模式-组合模式
    对层级数据递归调用执行操作。先说一下这个组合模式是composite,然后说一个场景,这个模式然后按照一个什么场景来做呢,举个例子,有一颗部门树,然后父部门有这个子部门,然后又有子......
  • Angular 打包 js文件 过大
    1、加了--prod参数后,angular-cli会把用不到的包都删掉//package.json中"scripts":{..."build":"ngbuild--prod"...}2、nginx开启gzip优化、在nginx中server......
  • #统计属于当前用户的文件的行数
    #统计属于当前用户的文件的行数#file1file2file3#./test.shfile1file2file3#$#if[$#-lt1]thenecho"usage:$0file..."exit1fiecho"$0开始统计您的文件......
  • 文件操作
    目录一.前言二.在python中打开/关闭文件open方法close资源回收with上下文管理(推荐使用)三.文件的操作模式r模式的使用w模式的使用a模式的使用+模式的使用b模式的使用(重......
  • 文件操作
    文件操作文件的概念操作系统显示给用户可以直接操作硬盘的快捷方式代码打开的两种方式:f=open('s.txt','r',encoding='utf8')f.close()#关闭打开的文件withop......
  • 编译py文件
    编译.py文件为.pyc文件pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种bytecode,py文件变成pyc文件后,加载的速度有所提高。而且pyc是一种跨平台的字节码......
  • redis的hash数据类型的基本操作
    1、首先连上你的redis以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示2、hash相关操作说明:redis的hash键值对集合,特别适合存储对象,类似于java中......
  • 2.5 查询文件具体的详细信息 .stat() 查询 st_ctime等文件信息
    #  查询文件信息  .stat()    importosforfileinos.scandir():#扫描目录文件print(file.stat())#查询文件具体的详细信息importos......
  • 进入python的世界_day9_python基础——文件操作
    一、文件操作1.什么是文件?​ 文件其实是操作系统暴露给用户操作硬盘的快捷方式(接口)2.代码如何操作文件​ 关键字open('')​三步走:​ 1.利用关键字open打......
  • 文件操作
    目录文件操作文件的概念打开文件的两种方式补充文件读写模式r模式w模式a模式w模式和a模式异同文件操作模式t模式b模式b模式对比t模式文件的诸多操作方法文件内光标的移动......