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

文件操作

时间:2022-10-09 17:34:09浏览次数:42  
标签:文件 encoding input print 操作 txt open

文件操作

目录

1文件的概念

文件就是操作系统给用户操作的快捷方式。

2代码打开文件的两种方法

方式1:
open() 方法
Python open() 方法用于打开一个文件,并返回文件对象。
在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
eg:
	f = open(文件路径,读写方式,encoding='utf8')
	f.close()
方式2:
	使用with方法
   with open (文件路径,读写方式,encoding='utf8') as 变量名:
    ps:with上下文管理可以自己子代码结束后自动调用close方法关闭资源
open方法的第一个参数是文件路径 并且撬棍跟一些字母的组合会产生特殊的含义导致路径查找混乱 为了解决该问题可以在字符串的路径前面加字母r
	D:\a\n\t
	r'D:\a\n\t'
以后涉及到路径的编写 推荐加上r

with支持一次性打开多个文件
	with open() as 变量名1,open() as 变量名2,open() as 变量名3:
		子代码

文件读写操作

'r' 只读模式:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
1文件路径不存在:会直接报错
with open(r'b.txt','r',encoding='utf8')as f:
    print(f.read())
2文件路径存在:正常读取文件的内容
with open(r'a.txt','r',encoding='utf8')as f:
    print(f.read())
    
'w' 只写模式:打开一个文件只用于写入
1如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。
with open(r'a.txt','w',encoding='utf8')as f:
    f.write('study hard and make progress every day\n')
    f.write('study hard and make progress every day\n')
    f.write('study hard and make progress every day\n')
2如果该文件不存在,创建新文件。
with open(r'a.txt','w',encoding='utf8')as f:
    pass
'a' 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
1文件路径不存在:自动创建文件
with open(r'b.txt','a',encoding='utf8')as f:
   pass
2文件路径存在:自动在末尾追加内容
with open (r'a.txt','a',encoding='utf8')as f:
    f.write('很开心见到了你')
    
当我们在编写代码的时候 有些部分不知道写什么具体代码 但是也不能空着不写这个时候可以使用关键字。
	pass
	...
只补全语法不执行功能 本身没有任何的含义   

文件操作模式

t 文本模式
默认的模式,即上面的r  w  a其实全称是 rt wt at 
1.只能操作文本文件.
2.读写都是以字符为单位。
3.需要指定encoding参数 如果不知道则会采用计算机默认的编码.

b 二进制模式(byte模式)
这个需要自己进行指定eg: rb wb ab 
1.可以操作任意类型的文件.
2.读写都是以bytes为单位.
3.不需要指定encoding参数 因为它已经是二进制模式了 不需要编码.

二进制模式与文本模式针对文件路径是否存在的情况下 规律是一样的!!!

文件诸多方法

1.read()
一次性读取文件内容 并且光标停留在文件末尾 继续读取则没有内容
并且当文件内容比较多的时候 该方法还可能会造成计算机内存溢出
括号内还可以填写数字 在文本模式下 表示读取几个字符如果未给定或为负则读取所有。
2for循环
一行行读取文件内容 避免内存溢出现象的产生
3readline([size])
读取整行,包括 "\n" 字符。
4readlines()
#['study hard and make progress every day\n', 'study hard and make progress every day\n', 'study hard and make progress every day\n', '很开心见到了你']
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
5readline()
判断文件是否具备读数据的能力会返回true和false
6write()
将字符串写入文件,返回的是写入的字符长度。
7witeable()
判断文件是否具备写数据的能力true和false
8writeline()
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
9flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

文件内光标的移动

with open(r'a.txt','rb')as f:
    print(f.read())
    f.seek(0,0)
    print(f.read())
    f.seek(0,0)
    print(f.read())
    print(f.tell())#返回光标距离文件开头产生的字节数
    seek(offset,whence)
    offset 是位移量  以字节为单位
    whence 是模式  0  1  2
    0是基于文件开头:文本和二进制模式都可以用
    1是基于当前位置:二进制模式可以用
    2是基于文件末尾:二进制模式可以用
    使用encode 编码
       decode 解码

作业

1.编写简易版本的拷贝工具
     自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
     任何类型数据皆可拷贝
     ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
soure_file_path = input('拷贝文件路径').strip()
target_file_path =input('目标路径').strip()
with open(r'%s' % source_file_path, 'rb') as read_f, open(r'%s' % target_file_path, 'wb') as write_f:
    for line in read_f:
        writr_f.write(lin)
2.利用文件充当数据库编写用户登录、注册功能
  文件名称:userinfo.txt
  基础要求:
  		 用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
  拔高要求:
       用户可以连续注册
      用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
    提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
while True:
    print("""
    1.注册功能
    2.登录功能
    """)
    choice = input('请选择您想要执行的功能编号>>>:').strip()
    if choice == '1':
        username = input('please input your username>>>:').strip()
        password = input('please input your password>>>:').strip()
        # 2.校验用户名是否已存在
        with open(r'userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:  # 'jason|123'
                real_name, real_pwd = line.split('|')
                if username == real_name:
                    print('用户名已存在 无法完成注册')
                    break  # 一旦重复 没有必要继续往下校验是否重复了 直接结束循环
            else:
                with open(r'userinfo.txt', 'a', encoding='utf8') as f1:
                    f1.write(f'{username}|{password}\n')
                print(f'用户{username}注册成功')
    elif choice == '2':
        # 1.获取用户名和密码
        username = input('please input your username>>>:').strip()  # 'jason'
        password = input('please input your password>>>:').strip()  # '123'
        # 2.打开文件读取内容并校验
        with open(r'userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:  # 'jason|123\n'
                real_name, real_pwd = line.split('|')  # 'jason' '123\n'
                if real_name == username and real_pwd.strip('\n') == password:
                    print('登录成功')
                    break
            else:
                print('用户名或密码错误')
    else:
        print('没有该功能编号')     

        




标签:文件,encoding,input,print,操作,txt,open
From: https://www.cnblogs.com/bnmm/p/16772931.html

相关文章

  • 10、python正式篇 文件和光标移动
    目录一、文件操作1、文件的概念2、代码打开文本的方式二、文件读写模式1、'r'只读模式read2、'w'只写模式write3、'a'尾部追写模式add三、文件操作模式1、t文本模式......
  • python 时间相关操作
    获取今天是周几time.strftime("%a",time.localtime())获取今天是一周的第几天time.strftime("%w",time.localtime())获取一段时间之前的日期信息((datetime.datetime.......
  • unity editor 获取指定路径下所有指定类型的文件
    使用AssetDatabase.FindAssets获取指定路径下资源。如下,获取指定路径下所有资源名:1string[]pathArr={ConstUtils.cfgPrefix_ActionTimeline};2......
  • 文件操作
    一、打开文件代码打开文件的两种方  ps:with上下文管理好处在于子代码运行结束自动调用close方法关闭资源with支持一次性打开多个文件withopen()asf1,open()......
  • C# 读取文件流
    1///<summary>2///读取文件流3///</summary>4///<paramname="filePath"></param>5///<returns></returns>6publicstaticbyte[]ReadFileStream(......
  • vue 前端导出PDF文件
    原理:通过对页面的截图进行生成PDF文件。PS:这里的截图指的是系统对页面的截图,不是你手动的截图,这里的截图进行可以长截图并且生成对应页数的PDF页码。  首先用npm引入......
  • python 文件去重
    importtimedefmain(file_name):try:withopen(file_name,'r',encoding='utf-8')asf:lines=f.readlines()print(lines)start=time.time()......
  • 文件的操作方法
    今日内容总结文件操作1.文件的概念就是操作系统暴露给用户操作硬盘的快捷方式eg:双击一个文件其实就是从硬盘将数据加载到内存Ctrl+s保存文件其实......
  • git的相关操作
    1.设置用户名和邮箱gitconfig--globaluser.name"小民"gitconfig--globaluser.email"[email protected]"2.查看一部分信息$gitconf......
  • rust 逐行读取文本文件
    usestd::fs::File;usestd::io::{BufRead,BufReader};fnmain(){//要打开的文件名letfilename="src/main.rs";//以只读模式打开文件letfile=File:......