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 路径

  1. Linux Mac

    e.g. '/home/admin/tt.txt'
  2. 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介绍的更多相关文章

  1. 聊聊 传统IO和网络IO

    IO 模型 传统 IO读写        磁盘IO主要的延时是由(以15000rpm硬盘为例): 机械转动延时(机械磁盘的主要性能瓶颈,平均为2ms) + 寻址延时(2~3ms) + 块传输延时(一般 ...

  2. java使用IO读写文件总结

    每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...

  3. python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  4. java io读写文件

    java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...

  5. IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流

    Java基础笔记 – IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流本文由 arthinking 发表于627 天前 ⁄ Java基础 ⁄ 评论数 1 ⁄ 被围观 2,036 views+ ...

  6. (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...

  7. Java中IO软件包的详细介绍

    一.Java Io流 Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为" ...

  8. java使用IO读写文件

    https://www.cnblogs.com/qiaoyeye/p/5383723.html java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:In ...

  9. 综合经验:IO读写错误必然导致程序崩溃

    仿佛是忽然间产生的问题,每次程序退出时候,必然崩溃,花了整整一天才找到原因,就是对数据库的IO读写错误.主要是因为析构函数调用了Disconnect函数,内容如下: void SFTPTool::Di ...

随机推荐

  1. POJ 1329

    模板题,注意一下输出就可以. #include <iostream> #include <cstdio> #include <cmath> #include < ...

  2. WAS_集群部署应用遭遇ADMA0085E和ADMA0109W错误

    原创作品,出自 "深蓝的blog" 博客.深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/47143431 近日 ...

  3. 【cl】工程导入

    File>Open 导入成功

  4. 《深入浅出 Java Concurrency》——原子操作

    part1 从AtomicInteger開始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包.而Queue.非常多情况下使用到了Atomic操作.因此首 ...

  5. Java深入 - Filter过滤器

    Java的1.3開始,对servlet2.3规范中增加了过滤器的支持.过滤器可以让我们对目标资源的请求和响应进行截取. 一些filter的特性: 1. Filter是Servlet规范的规定,须要Se ...

  6. vim下很好的右键复制方法

    1)先按shift ,然后鼠标选中即可复制:(shift按下时为非vim环境) 2)好方法: "Enable and disable mouse use noremap <f1> ...

  7. Android——build.prop 解析【转】

    本文转载自:http://blog.csdn.net/lengyue1084/article/details/77637354 一.概念 在Android设备shell终端可以看到/system目录下 ...

  8. Linux学习之设置联网,关闭防火墙,关闭selinux

    桥接模式,给一台物理机,有自己独立的IP. boot分区,引导分区,系统启动,内核文件. swap分区,内存扩展分区.1.5或2倍.内存不够的时候,会写入其中.正常给8G或者16G就够了.不需要非要1 ...

  9. xBIM 基础02 快速入门

    系列目录    [已更新最新开发文章,点击查看详细]  一.新建项目 Visual Studio 新建项目.项目创建完成后 Nuget ,项目添加 Xbim.Essentials,那么如果项目需要几何 ...

  10. .net 对称加密

    后台   public class CryptoHelper     {         // 对称加密算法提供器         private ICryptoTransform encryptor ...