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. Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理

    1.Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理 2. 自定义注解: 使用@interfac ...

  2. Marching squares & Marching cubes

    提要 Marching squares 主要是用于从一个地图(用二维数组表示)生成轮廓的算法.Marching cubes则相应的是在空间生成网格的方法.最常见的应用就是天气预报中气压图的生成.还经常 ...

  3. linux命令用来查看日志关键字

    1.查看日志 前 n行: cat 文件名 | head -n 数量 demo: cat  test.log | head -n 200 # 查看test.log前200行 2.查看日志 尾 n行: c ...

  4. 日积(Running)月累(ZSSURE):Task之Cancel、OpenAccess之Delete及fo-dicom之DeepCopy、

    题记: 最近看了一篇关于架构方面的良心长文你的架构是怎样一步步腐化的?,文中字字句句道出了诸多从业者.初创企业,以及BAT都会遇到的问题,细细品读后认为工作生活中的诸多情况皆如此,都会有一个体量由小到 ...

  5. declare-styleable的使用

    declare-styleable:declare-styleable是给自定义控件添加自定义属性用的. 1.首先,先写attrs.xml 在res-vlaues文件夹下创建资源文件attrs.xml ...

  6. JavaScript Simple

    ylbtech-JavaScript: 1.返回顶部 1.   2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http: ...

  7. 2014/09/20 关于ArrayList的几种操作

    1.删除ArrayList集合元素 删除ArrayList集合里面的元素时,提供了Clear方法,Remove方法,RmoveAt方法和RemoveRange方法. Clear方法是移除所有的元素 R ...

  8. nRF52832添加微信硬件接入服务AirSync

    开发环境 SDK版本:nRF5_SDK_15.0.0 芯片:nRF52832-QFAA OS: FreeRTOS 10.0.0 测试APP:AirSyncDebugger  https://iot.w ...

  9. BZOJ 4032 trie树+各种乱搞

    思路 : 先对b 的所有后缀建立trie树 第一问 暴力枚举a串的起点 在trie树上跑 找到最短的 第二问 也是暴力枚举a串的起点 a和b顺着暴力匹配就好 第三问 求出来a在第i个位置 加一个字母j ...

  10. poj 1161 Floyd+枚举

    题意是: 给出n个点,围成m个区域.从区域到另一个区域间需穿过至少一条边(若两区域相邻)——边连接着两点. 给出这么一幅图,并给出一些点,问从这些点到同一个区域的穿过边数最小值. 解题思路如下: 将区 ...