03.IO读写-1.IO介绍
1 文件操作介绍
in: 输入,读入。从硬盘中读到内存
out: 输出。从内存写到硬盘
文件的作用: 数据存储
2 文件的打开与关闭
2.1 打开文件
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件名,访问模式)
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Open file and return a stream
open这里用了三个参数
1、文件的名字
2、模式
3、编码方式 与 文件的编码格式一致。如果有中文,不一致就造成乱码
说明
| 访问模式 | 具体说明 |
|---|---|
| r | 以只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式。 |
| w | 打开一个文件只用于写入,如果该文件已存在则将其覆盖;如果不存在,创建新文件。 |
| a | 打开一个文件用于追加,如果该文件已存在,文件将会放在文件的结尾,也就是说,新的内容会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入。 |
| rb | 以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头,这是默认模式。 |
| wb | 以二进制格式打开一个文件只用于写入,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
| ab | 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,也就是说,新的内容会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入。 |
| r+ | 打开一个文件用于读写,文件指针将会放在文件的开头。 |
| w+ | 打开一个文件用于读写,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
| a+ | 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾,文件打开时会是追加模式;如果该文件不存在,创建新文件用于读写。 |
| rb+ | 以二进制格式打开一个文件用于读写,文件指针将会放在文件的开头。 |
| wb+ | 以二进制格式打开一个文件用于读写,如果该文件已存在则将其覆盖;如果该文件不存在,创建新文件。 |
| ab+ | 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾;如果该文件不存在,创建新文件用于读写。 |
r,w,a:
操作的都是字符
目标文件:文本文件
字符 = 字节+解码
bytes.decode()
字符+编码 = 字节
str.encode()
rb,wb,ab:
操作的都是字节
目标文件:任何文件
2.2 关闭文件
close()
文件流是占用系统资源的,所以用完之后,记得关闭。否则,占用操作系统资源。
2.3 路径
- Linux Mac
e.g. '/home/admin/tt.txt' - Windows
e.g. 'C:\user\a.txt'
e.g. 'C:/user/a.txt'
e.g. r'C:\user\a.txt'
3 文件的读写
3.1 写数据(write)
- 使用write()可以完成向文件写入数据
3.2 读数据(read)
- 会读取所有内容,但是开发中一般不用,测试使用
- 使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
- 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
3.3 读数据(readlines)
- 就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
3.4 读数据(readline)
- 读一行
4 应用:制作文件的备份
任务描述:
输入文件的名字,然后程序自动完成对文件进行备份
参考代码:
oldFileName = input("请输入要拷贝的文件名字:")
oldFile = open(oldFileName,'r')
# 如果打开文件
if oldFile:
# 提取文件的后缀
fileFlagNum = oldFileName.rfind('.')
if fileFlagNum > 0:
fileFlag = oldFileName[fileFlagNum:]
# 组织新的文件名字
newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag
# 创建新文件
newFile = open(newFileName, 'w')
# 把旧文件中的数据,一行一行的进行复制到新文件中
for lineContent in oldFile.readlines():
newFile.write(lineContent)
# 关闭文件
oldFile.close()
newFile.close()
5、文件的随机读写
5.1 获取当前读写的位置
在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取
从0开始到字符的个数
# 打开一个已经存在的文件
f = open("test.txt", "r")
str = f.read(3)
print ("读取的数据是 :%s ", str)
# 查找当前位置
position = f.tell()
print ("当前文件位置 :%s ", position)
str = f.read(3)
print ("读取的数据是 :%s ", str)
# 查找当前位置
position = f.tell()
print ("当前文件位置 :%s ", position)
f.close()
5.2 定位到某个位置
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用
seek(位置)
6、文件的重命名、删除
7、文件夹的相关操作
- [ ] 详细了解文件文件夹的操作,需要掌握os,os.path.shutil模块内容
8、应用:批量重命名
import os
import os.path
#输入完整路径
path = input('输入路径:')
#列出所有内容
ls = os.listdir(path)
#切换工作目录
os.chdir(path)
#遍历
for i in ls:
#判断是否是文件
if os.path.isfile(i):
num = i.rfind('.')
if num!=-1:
newName = i[:num]+'-new'+i[num:]
#重命名
os.rename(i,newName)
03.IO读写-1.IO介绍的更多相关文章
- 聊聊 传统IO和网络IO
IO 模型 传统 IO读写 磁盘IO主要的延时是由(以15000rpm硬盘为例): 机械转动延时(机械磁盘的主要性能瓶颈,平均为2ms) + 寻址延时(2~3ms) + 块传输延时(一般 ...
- java使用IO读写文件总结
每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- java io读写文件
java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...
- IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流
Java基础笔记 – IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流本文由 arthinking 发表于627 天前 ⁄ Java基础 ⁄ 评论数 1 ⁄ 被围观 2,036 views+ ...
- (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...
- Java中IO软件包的详细介绍
一.Java Io流 Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为" ...
- java使用IO读写文件
https://www.cnblogs.com/qiaoyeye/p/5383723.html java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:In ...
- 综合经验:IO读写错误必然导致程序崩溃
仿佛是忽然间产生的问题,每次程序退出时候,必然崩溃,花了整整一天才找到原因,就是对数据库的IO读写错误.主要是因为析构函数调用了Disconnect函数,内容如下: void SFTPTool::Di ...
随机推荐
- Java枚举类型使用示例
Java枚举类型使用示例 学习了:https://www.cnblogs.com/zhaoyanjun/p/5659811.html http://blog.csdn.net/qq_27093465/ ...
- 在java中,怎样跳出当前的多重循环?
</pre>直接用break ;详细举比例如以下:<p></p><p></p><p></p><pre name ...
- Android之后台启动Activity
在实际开发中.Activity须要启动但界面又不能显示出来,这时就须要后台启动.但又不是finish(),这时就要用到Activity中的moveTaskToBack函数,先看下官网 參数nonRoo ...
- QUERY_REWRITE_INTEGRITY
QUERY_REWRITE_INTEGRITY Property Description Parameter type String Syntax QUERY_REWRITE_INTEGRITY = ...
- c++11 实现半同步半异步线程池
感受: 随着深入学习,现代c++给我带来越来越多的惊喜- c++真的变强大了. 半同步半异步线程池: 事实上非常好理解.分为三层 同步层:通过IO复用或者其它多线程多进程等不断的将待处理事件加入到队列 ...
- 0x63树的直径与最近公共祖先
凉 bzoj1999 先把树的直径求出来,从左往右枚举,对于当前位置i,找到满足限制并且最远的点j,当前位置最大值就是max(i~j区间内除直径外的子树路径长度最大值,1~i的长度,j~n的长度) 然 ...
- [xPlugins] jQuery Contextmenu右键菜单
[2012-04-12] Contextmenu 右键菜单 v0.1 版本发布 [功能] 在特定区域弹出右键菜单 [功能] 可以在弹出右键菜单区域内,再屏蔽某个小区域. [功能] 有两种方式添加右键菜 ...
- xBIM 基础02 快速入门
系列目录 [已更新最新开发文章,点击查看详细] 一.新建项目 Visual Studio 新建项目.项目创建完成后 Nuget ,项目添加 Xbim.Essentials,那么如果项目需要几何 ...
- js编写时间选择框
效果图: 代码: 新建js:WdatePicker.js /* * My97 DatePicker 4.72 Release * License: http://www.my97.net/dp/lic ...
- BZOJ3143: [Hnoi2013]游走(期望DP 高斯消元)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3597 Solved: 1618[Submit][Status][Discuss] Descript ...