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. spring-cloud-feign 使用@RequetParam报错QueryMap parameter must be a Map: class java.lang.String

    这里使用spring-cloud-start-feign: 1.2.2 REALEASE版本,依赖管理器版本是 Camden.SR2 出错的原因是@RequestParam的value为empty时, ...

  2. 使用Android Studio 1.3 版本号进行NDK开发

    众所周知Android Studio 1.3 版本号新增了NDK支持,能够非常方便的在上面开发C++或者C代码了,但是预览版功能不是非常完好,须要非常多步骤,另一些奇怪的BUG,整了半天最终能够使用A ...

  3. 初步了解Shuttle ESB

    ESB:EnterpriseService Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物.从面向服务体系架构发展而来. ESB採用了"总线"这种模 ...

  4. Spring JDBC数据库开发

    针对数据库操作,Spring框架提供了JdbcTemplate类. 1.Spring JDBC的配置 创建配置文件applicationContext.xml,添加如下代码: <!--配置数据源 ...

  5. MySQL数据库——存储和函数

    一.存储过程1 基本语法CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 格式[I ...

  6. 在IIS6,7中部署ASP.NET网站

    查看web.config文件 ASP.NET网站与一般的桌面程序不同,不是拷贝过来就能运行的(数据库连接除外). 要想运行它,通常需要一些配置过程.但是,我们到底需要配置什么呢?答案是:查看web.c ...

  7. Visual C++ RunTime的特征——非烫即屯

    Visual C++ RunTime的特征——非烫即屯 大一刚学C语言,第二次上机课,当我发现我照着书抄写的程序在运行之外的黑框里面跳出一排“烫烫烫烫烫”,当时就震惊了.你们能想象一个来自小城,在大学 ...

  8. nyoj--744--蚂蚁的难题(一)

    蚂蚁的难题(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇.不过他最近遇到了一个难题: 给定一个区间[a,b],在 ...

  9. B - Spyke Talks

    Problem description Polycarpus is the director of a large corporation. There are n secretaries worki ...

  10. Hadoop MapReduce编程 API入门系列之分区和合并(十四)

    不多说,直接上代码. 代码 package zhouls.bigdata.myMapReduce.Star; import java.io.IOException; import org.apache ...