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

文件操作

时间:2023-12-04 18:48:50浏览次数:32  
标签:文件 操作系统 date 操作 print input open

文件操作

(1)文本处理引入

  • 应用程序运行过程中产生的数据最先都是存放于内存中的。
  • 若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统。
  • 而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念。
  • 用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。

(2)文件操作的基本流程。

  • 打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f。f为文件句柄。
  • 调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作。
  • 向操作系统发起关闭文件的请求,回收系统资源。
# 文件操作的基本流程
# 1.打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f。f为文件句柄。
f = open('s.txt', 'r', encoding='utf-8')
# 2.调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作。
date = f.read()
print(date)#my name is syh
# 3.向操作系统发起关闭文件的请求,回收系统资源。
f.close()

(3)资源回收与with的用法。

  • 打开一个文件包含两部分资源

    • 应用程序的变量f和操作系统打开的文件。
    • 在操作完毕一个文件时,必须把与该文件的这两部分资源全部回收
    #回收方法:
    f.close() # 回收操作系统打开的文件资源
    del f	  # 回收应用程序级的变量
    
  • 其中del f一定要发生在f.close()之后

    • 否则就会导致操作系统打开的文件无法关闭,白白占用资源。
  • 而python自动的垃圾回收机制决定了我们无需考虑del f,

    • 这就要求我们,在操作完毕文件后,一定要记住f.close()。
  • 虽然我们如此强调,但是大多数读者还是会不由自主地忘记f.close()。

  • 考虑到这一点,python提供了with关键字来帮我们管理上下文。

with的用法

# with关键字的用法
with open('s.txt', 'r', encoding='utf-8') as f:
    date = f.read()
    print(date)#my name is syh
  • 若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

(4)文件的操作模式

  • 出现路径问题时:

    • 当路径中可能存在有转移的字符时,字符串前面加上r来解决转义的问题。
  • 只读:r

  • 只写:w

  • 追加写:a

1.只读r模式

  • 文件不存在的时候会报错,文件存在时文件内的指针跳到文件的开头。
with open('s.txt', 'r', encoding='utf-8') as f:
    date = f.read()
    print(date)#my name is syh

2.只写w模式

  • w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头。
  • 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
  • 如果重新以w模式打开文件,则会清空文件内容
with open('s.txt','w',encoding='utf-8') as  f:
    date=f.write('syh')
    print(date)#3

3.追加写a模式

  • a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾。
with open('s.txt', 'a', encoding='utf-8') as f:
    f.write('syh\n')
    f.write('hahaha\n')

强调 w 模式与 a 模式的异同

  • 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
  • 不同点:
    • 以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后。
    • 以w模式打开文件,则会清空文件内容。

练习:

# 1.用户注册
print('注册')
username = input('请输入注册用户名:').strip()
password = input('请输入注册密码:').strip()
with open('syh.txt', 'w', encoding='utf-8') as f:
    info = '%s:%s\n' % (username, password)
    f.write(info)

# 2.登录
print('登录')
username_input = input('请输入用户名:').strip()
password_input = input('请输入密码:').strip()
with open('syh.txt', 'r', encoding='utf-8') as f:
    for line in f:
        u, p = line.strip().split(':')
        if u == username_input and p == password_input:
            print('登录成功')
            break
        else:
            print('用户名和密码错误,登录失败!')

标签:文件,操作系统,date,操作,print,input,open
From: https://www.cnblogs.com/suyihang/p/17875655.html

相关文章

  • SpringBoot 如何实现文件上传和下载
    一、文件上传——upload<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>文件上传SpringBoot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种方式,用于支持文件上传。下面我们将介绍如......
  • vscode latex配置文件
    {"latex-workshop.latex.autoBuild.run":"never",//"latex-workshop.latex.autoBuild.run":"onSave","latex-workshop.latex.autoBuild.interval":10000,"latex-workshop.latex.recipes":......
  • java 操作redis更新子节点数据
    1.引入Jedis依赖确保在你的Java项目中引入了Jedis依赖。你可以使用Maven添加以下依赖:<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.11.1</version></dependency>2.示例代码importredis......
  • 金蝶云星空单据编辑界面,不允许批量填充操作
    一、案例演示售后单,明细信息单据体,物料编码字段禁止批量填充。 二、开发设计编写表单插件,在BeforeEntryBatchFill事件。publicoverridevoidBeforeEntryBatchFill(BeforeBatchFillEventArgse){base.BeforeEntryBatchFill(e);//单个字段//if(e.FieldKey.E......
  • quickjs加载字节码文件
    一、使用qjsc编译字节码hello.js console.log("HelloWorld") qjsc.exe-chello.js1constuint32_tqjsc_hello_size=78;23constuint8_tqjsc_hello[78]={40x02,0x04,0x0e,0x63,0x6f,0x6e,0x73,0x6f,50x6c,0x65,0x06,0x6c,0x6f,......
  • 系统框架层修改,编译,推送相关操作
    参考了原文,原文记录更加详细,framework.jarframework.jar是包含了Android系统框架层Java类的压缩文件。如果只修改了该文件,可以按照以下步骤操作#启动编译工具sourcebuild/envsetup.sh#编译framework.jar文件makeframework或者cd~/framework/base:mm或者make-j32......
  • Day07 包机制和JavaDoc文件生成
    1.包机制1.1语法格式packagepkg1[.pkg2[.pkg3...]];注意:​ 此句必须放在文件最开始位置1.2提倡的命名格式一般利用公司的域名倒置作为包名如www.baidu.com其包名就推荐命名为com.baidu.www1.3引用包importpackagepkg1[.pkg2[.pkg3...]].(classname|*);​ -......
  • 获取git版本号写入到DLL文件
    stringbaseDirectory=System.AppDomain.CurrentDomain.BaseDirectory;stringprojectDirectory=baseDirectory.Substring(0,baseDirectory.LastIndexOf("\\aspnet-core"));stringfilePath=projectDirectory+"\\aspnet-core\\co......
  • Spring Boot中的文件上传和下载实现
    文件上传文件上传是Web应用程序中常见的功能之一,SpringBoot提供了MultipartFile接口来处理文件上传。以下是实现文件上传的步骤:添加依赖在pom.xml文件中添加以下依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</art......
  • Excel -- 基本操作
    自定义序列导入CSVCtrl+S就不会弹错误了......