当前位置: 首页 > 编程日记 > 正文

day07 -文件的基本操作

1、什么是文件?

文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位文件的操作核心就:读、写即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序对文件的读写操作转换成具体的硬盘指令(比如控制盘片转动,控制机械手臂移动来读写数据)

2 为什么要有文件?
因为内存无法永久保存数据,但凡我们想要永久保存数据都需要保存到硬盘中,而操作文件就可以实现对硬件的操作

3、文件的读写模式
控制读写文件内容的结果有两种:t模式text,b模型bytes
1、t模式:文本文件模式
2、b模式:二进制模式
注意:
1、t与b这两种模式均不能单独使用,都需要与r/w/a之一连用
2、默认的内容格式是t
3、只有文本文件才能用t模式,也只有文本文件才有字符编码的概念

4、操作文件的三种模式:
(1)r:read,只读模式
  1、只能读,不能写
  2、在文件不存在时,会报错,在文件存在的时候会将文件指针移动到开头

 1 b.txt内容如下:
 2 啊啊啊啊
 3 哈哈哈哈
 4 呵呵呵呵
 5 
 6 打开文件的2种方法
 7  (1 8 f=open(r'b.txt',mode='rt',encoding='utf-8')
 9 (210 with open(r'b.txt',mode='rt',encoding='utf-8')as f:
11 print(f.read()) #将文件的内容全部读出来
12  print(f.readline(),end='')#一行一行读的话 需要在末尾加end = ''
13  print(f.readline(),end='')#end = ''去除print末尾的空格
14  print(f.readline(),end='')
15  print(f.readlines()) #将文件内容打印出列表每个值的后面都有\n
16  print(data)
17  f.close()
18 注意(1)方法必须要关闭,(2)方法不需要关闭        
View Code

(2)

w:只写模式
  1、只能写,不能读
  2、在文件不存在时会创建空文件,在文件存在的时候会将文件内容清空

a:只追加写模式
  1、只能写,不能读
  2、在文件不存在时会创建空文件,在文件存在的时候会将指针移动到文件末尾

(1) f=open('d.txt',mode='at',encoding='utf-8')
(2)with open('d.txt',mode='at',encoding='utf-8')as ff.read()f.write('555555\n6666\n')f.writelines(['77777\n','8888888\n','999999999\n'])f.close()#for 循环取值
for line in f:print(line)
可以通过.strip('\n')构造一个有规律的字符串,然后通过.split(‘’)方法将取出的值编程一个一个列表 通过 for 循环 做进一步应用

拷贝文件的操作(with的另外一种用法)

(1)

with open('e.txt','rb') as f,open('j.txt','wt',encoding='utf-8') as f1:

src_data=f.read()

res=src_data.decode('utf-8')

 f=open('c.txt',mode='rb')f.seek(-9,2)print(f.readline().decode('utf-8'))print(f.tell())f.close()

print(res,type(res))

f1.write(res)

(2)

with open('e.txt','rb') as f,\
  open('j.txt','wb') as f1:
  f1.write(f.read())

5、文件操作的其他方法:

1、与t模式结合使用

(1)r+t 可读、可写 (2)w+t 可写、可读(3)a+t 可追加写、可读

2、与b模式结合使用

(1)r+b 可读、可写(2)w+b可读、可写 (3)a+t 可追加写、可读

#注关于b模式的文本文件: 写入时候需要encode 读取文件时候需要decode

1,b模式写入 
with open('b.txt',mode='rb') as f:data=f.read()#如果想要看到文件中的具体内容需要decodeprint(data.decoding('utf-8'))2、b模式读取
with open('b.txt',mode='wb') as f:f.write('123\n'.encode('utf-8')

3、

f.seek(offset,whence)
offset代表文件的指针的偏移量,单位是字节bytes
whence代表参考物,有三个取值
0:参照文件的开头
1:参照当前文件指针所在位置
2: 参照文件末尾
ps:快速移动到文件末尾f.seek(0,2)

1(0)

f=open('c.txt',mode='rt',encoding='utf-8')
f.seek(9,0)
print(f.tell())  #每次统计都是从文件开头到当前指针所在位置
print(f.readline())
f.close()

2(1)

 f=open('c.txt',mode='rb')f.readline()f.seek(6,1)print(f.readline().decode('utf-8'))print(f.tell())f.close()

3(2)

 f=open('c.txt',mode='rb')f.seek(-9,2)print(f.readline().decode('utf-8'))print(f.tell())f.close()

6、文件修改、拷贝

 1 修改文件内容的方式一:
 2 思路:先将原文件内容一次性全部读入内存,然后在内存修改完毕后,再
 3 覆盖写回原文件
 4 优点:在修改期间,文件内容只有一份
 5 缺点:当文件过大的情况下或占用过多的内存空间
 6 
 7  with open('d.txt','rt',encoding='utf-8') as read_f:
 8      msg=read_f.read()
 9      msg=msg.replace('alex','xiang')
10       print(msg)
11 
12  with open('d.txt','wt',encoding='utf-8') as write_f:
13      write_f.write(msg)
14 
15 修改文件内容的方式二:
16 思路:
17 1、以读的方式打开原文件,以写的方式打开一个新文件
18 2、从原文件中循环读取每一行内容修改后写入新文件
19 3、删除原文件,将新文件重命名为原文件的名字
20 
21 优点:同一时刻只有一行内容存在于内存中
22 缺点:在修改期间,文件内容始终存在两份,但修改完毕后会只留一份
23 import os
24 with open('d.txt','rt',encoding='utf-8') as read_f,\
25         open('d.txt.swap','wt',encoding='utf-8') as write_f:
26     for line in read_f:
27         write_f.write(line.replace('xiang','ALEXSB'))
28 
29 os.remove('d.txt')  删除老文件
30 os.rename('d.txt.swap','d.txt')
31 
32 
33  with open('info.txt',mode='rt',encoding='utf-8')as f:
34      f.seek(9,0)
View Code

7,知识点代码总结

 1 #1、
 2 with open('info.txt',mode='rt',encoding='utf-8')as f:
 3      f.seek(9,0)
 4      print(f.readline()) #愿意跟我去吃鸡么
 5 
 6      f.seek(35,0)
 7      print(f.readline())#
 8 #2、
 9  with open('info.txt', mode='rb')as f: #1,2模式只能在b模式下使用
10      f.readline()
11      f.seek(6,1)
12      print(f.readline().decode('utf-8')) i am wcl
13      f.seek(-5,2)
14      print(f.readline().decode('utf-8')) study
15 #3、
16  with open('info.txt',mode='rb',encoding='utf-8')as f:
17      print(f.read(4)) 哈喽,愿
18 
19  with open('info.txt',mode='rb') as f2:
20      print(f2.read(3))
21 
22  with open('1.txt',mode='r',encoding='utf-8') as f1: #先全部读出来
23      data =f1.read()
24      data = data.replace('i','y')
25  with open('2.txt',mode='w',encoding='utf-8') as f1:# 赋值给一个变量在写入一个新的文件
26      f1.write(data)
27 #4、
28  import os
29  with open('2.txt',mode='r',encoding='utf-8')as f ,open('222.txt',mode='w',encoding='utf-8')as f1:
30      for line in f:
31          f1.write(line.replace('i','y'))
32  os.remove('2.txt')
33  os.rename('222.txt','1.txt')
View Code

转载于:https://www.cnblogs.com/wcl0517/p/9136353.html

相关文章:

淘宝Tengine服务器开源

http://tengine.taobao.org/index_cn.htmlTengine是由 淘宝核心系统部基于Nginx开发的Web服务器,它在 Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性。Tengine的性能和稳定性已经在大型的网站如 淘宝网, 淘宝商城等…

22个案例详解Pandas数据分析/预处理时的实用技巧,超简单

作者 | 俊欣来源 | 关于数据分析与可视化今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说Pandas计算交叉列表Pandas将字符串与数值转化成时间类型Pandas将字符串转化成数值类型Pandas当…

PL/SQL 中Returning Into的用法

ORACLE的DML语句中可以指定RETURNING INTO语句。RETURNING INTO语句的使用在很多情况下可以简化PL/SQL编程,少一次select into语句。DELETE操作:RETURNING返回的是DELETE之前的结果; INSERT操作:RETURNING返回的是INSERT之后的结果…

Java常用多线程辅助工具---countdownLatch

为什么80%的码农都做不了架构师?>>> 前言 上一篇博文说到semaphore,一个加强版的synchronized,该多线程辅助工具适用于控制对资源操作或者访问的场景。现在有一张场景是,需要等各个线程都都执行完了再进行下一步的操作…

听说,英特尔要对外开放 x86 授权?

整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)同为主流芯片架构,相较于可申请授权的 ARM 和开源的 RISC-V,x86 一直以来都保持着“高高在上”的立场——唯有英特尔和 AMD 拥有 x86 授权。但目前看来,x86 的“高冷…

Linux下gedit显示行号

Gedit 编辑->视图

关于String数组的用法

android ContextWrapper.getResources(ContextWrapper.java:89) getResources()报错原因是在OnCreate方法外 无法完成Context的初始化 正确做法: String[] names;names new String[6];names[0] getResources().getString(R.string.a);names[1] getResources().g…

使用RabbitMQ做数据接收和处理时,自动关闭

场景:N个客户端向MQ里发送数据;服务器上有另一个控制台程序(假设叫ServerClient)来处理这里数据(往数据库保存)。方向为Client * n→MQSERVER→ServerClient 问题:ServerClient自动关闭,没有错误日志&#…

在 Python 中妙用短路机制

作者 | 费弗里来源 | Python大数据分析本期我们即将学习的是:Python中短路机制的妙用。不同于物理学中的「短路」(Short circuit)那般危险,Python中的短路机制非常有用,跟很多其他编程语言中的短路机制作用类似&#x…

《Advanced PHP Programming》读书笔记

此书无中文版,但是写的极好!本来想翻译的,可是时间不允许了。 http://www.amazon.com/Advanced-PHP-Programming-George-Schlossnagle/dp/0672325616/refpd_rhf_dp_p_t_1约定:加粗字体表示章节,由于时间关系解释性的说…

cookie记录用户的浏览商品的路径

在电子商务的网站中,经常要记录用户的浏览路径,以判断用户到底对哪些商品感兴趣,或者哪些商品之间存在关联。 下面将使用cookie记录用户的浏览过的历史页面。该网站将每个页面的标题保存在该页面的$TITLE 变量中,用户每访问一次&a…

如何快速写一个违背双亲委托机制的classloader

很多情况下,不得以必须写个classloader来满足需求。例如你一个工程里你想用相同的数据库的多个版本,自己制定了一个jar包目录,没有classloader管理等等。如果是一个遵循java已经规定好的机制的classloader(双亲委托以及加载依赖类…

让我们谈谈RAID

转自:http://soft.zdnet.com.cn/techupdate/2004/0330/397707.shtml 更新时间: 2004-03-30 17:14:00 作者: 赵效民 感觉写的很好就转来了。 RAID的种类 RAID的英文全称为Redundant Array of Inexpensive(或Independent) Disks&…

Ampere 携手 Rigetti 开发混合量子经典计算机

该合作旨在为价值 160 亿美元的机器学习市场提供服务,赋能机器学习应用的发展双方将把 Ampere Altra Max 处理器和 Rigetti 量子处理单元进行优化结合,为机器学习提供整合的云平台 2022 年 2 月 21 日,安晟培半导体科技有限公司(A…

[C++] NULL VS nullptr

NULL VS nullptr 转载于:https://www.cnblogs.com/tianhangzhang/p/4945623.html

swift 的defer使得资源的分配和释放代码可以放到一起

只是一种语法和逻辑上的优化

烂泥:haproxy学习之手机规则匹配

2019独角兽企业重金招聘Python工程师标准>>> 本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb。 今天我们来介绍下有关haproxy匹配手机的一些规则配置。 一、业务需要 现在根据业务的实际需要&a…

jQuery日期选择器插件date-input

官网:http://jonathanleighton.com/projects/date-input/下载: http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js http://github.com/jonleighton/date_input/raw/master/jquery.date_input.js http://github.com/jonleighton/date_inp…

厉害了,用Python绘制动态可视化图表,并保存成gif格式

作者 | 俊欣来源 | 关于数据分析与可视化最近有粉丝问道说“是不是可以将这些动态的可视化图表保存成gif图”,小编立马就回复了说后面会写一篇相关的文章来介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块。安装相关…

facade-门面模式

解决问题 客户端调用逻辑与业务代码有效隔离,使得客户端调用只和Facade进行交互,内部的调用逻辑由Facade进行实现。此模式也可以和接口化编程结合,进一步降低客户端与业务逻辑的耦合 应用场景 它主要应用在代码结构的设计,合理组织…

淘宝李晓拴:淘宝网PHP电子商务应用

源自:http://tech.qq.com/a/20110512/000298.htm 大家好,大家知道淘宝搜索是一个典型PHP架构。在座同学不知道有多少人使用过淘宝搜索可以举手示意一下?在开始这个话题之前我们先谈一下Polyglot,多语言混合编程,淘宝有…

玩爬虫不会登陆?这个工具拿走不谢!

作者 | 周萝卜来源 | 萝卜大杂烩在日常学习当中,我们或多或少都会到网上抓取一些数据,比如豆瓣、微博等等,但是这些网站在非登录的情况只能拿到部分数据,有很多数据都是需要登陆之后才可以获取的,那么模拟登陆就成为了…

Oracle分页

先看以下两条语句的执行结果: 语句一:select rownum,empno,sal from emp order by empno; ROWNUM EMPNO SAL ---------- ---------- ---------- 1 7369 800 2 7499 1600 3 7521 …

Scala类型系统——高级类类型(higher-kinded types)

高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors)。它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它函数作为参数的函数;高级类类型则是将构造类类型作为参数类型。一个高级类…

android休眠唤醒驱动流程分析【转】

转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501标准linux休眠过程:l power management notifiers are executed with PM_SUSPEND_PREPAREl tasks are frozenl target system sleep state is announced to the …

PHP使用curl_multi_add_handle并行处理

http://www.php.net/manual/zh/function.curl-multi-add-handle.php<?php// 创建一对cURL资源$ch1 curl_init();$ch2 curl_init();// 设置URL和相应的选项curl_setopt($ch1, CURLOPT_URL, "http://www.baidu.com/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl…

斯坦福团队是如何构建更好用的聊天 AI 呢?

作者&#xff1a;Standford AI译者&#xff1a;Yang来源&#xff1a;数据实战派2019 年&#xff0c;凭借着 Chirpy Cardinal 机器人&#xff0c;斯坦福首次在 Alexa Prize Socialbot Grand Challenge 3 中赢得了第二名。本文将进一步揭示 Chirpy Cardinal 开发细节&#xff0c;…

使用Linux进行缓冲区溢出实验的配置记录

在基础的软件安全实验中&#xff0c;缓冲区溢出是一个基础而又经典的问题。最基本的缓冲区溢出即通过合理的构造输入数据&#xff0c;使得输入数据量超过原始缓冲区的大小&#xff0c;从而覆盖数据输入缓冲区之外的数据&#xff0c;达到诸如修改函数返回地址等目的。但随着操作…

Javascript导出Excel的方法

<SCRIPT LANGUAGE"javascript"> function method1(tableid) {//整个表格拷贝到EXCEL中 var curTbl document.getElementById(tableid); var oXL new ActiveXObject("Excel.Application"); //创建AX对象excel var oWB oXL.Workbooks.Add(); //获取…

Top 15 不起眼却有大作用的 .NET功能集

目录1. ObsoleteAttribute2. 设置默认值属性&#xff1a; DefaultValueAttribute3. DebuggerBrowsableAttribute4. &#xff1f;&#xff1f;运算符5. Curry 及 Partial 方法6. WeakReference7. Lazy8. BigInteger9. 非官方关键字&#xff1a;__arglist __reftype __makeref __…