IO

1. 定义
>在内存中存在数据交换的操作认为是IO操作,比如和终端交互 ,和磁盘交互,和网络交互等

2. 程序分类

>* IO密集型程序:在程序执行中有大量IO操作,而cpu运算较少。消耗cpu较少,耗时长。

>* 计算密集型程序:程序运行中计算较多,IO操作相对较少。cpu消耗多,执行速度快,几乎没有阻塞。

文件

文件是保存在持久化存储设备(硬盘、U盘、光盘..)上的一段数据。从功能角度分为文本文件(打开后会自动解码为字符)、二进制文件(视频、音频等)。在Python里把文件视作一种类型的对象,类似之前学习过的其它类型。

字节串(bytes)
在python3中引入了字节串的概念,与str不同,字节串以字节序列值表达数据,更方便用来处理二进程数据。因此在python3中字节串是常见的二进制数据展现方式。

* 普通的ascii编码字符串可以在前面加b转换为字节串,例如:b'hello'
* 字符串转换为字节串方法 :str.encode()
* 字节串转换为字符串方法 : bytes.decode()

文件读写

对文件实现读写的基本操作步骤为:打开文件,读写文件,关闭文件

 """
file_open.py
文件打开方式训练
""" # 打开文件
try:
# fd = open('a.py','r') # 以只读打开
# fd = open('a.py','w') # 以只写方式打开
# fd = open('a.py','a') # 追加方式 """
普通的文本文件 
既可以使用文本方式打开也可以使用二进制方式打开
二进制文件则必须以二进制方式打开
"""
fd = open('a.py','rb') # 二进制方式
print(fd)
except Exception as e:
print(e) # 读写文件 # 关闭文件
fd.close()

open.py

 """
file_read.py
文件读取演示
""" # 打开文件
f = open('test','r') # read 循环读取
# while True:
# # 读到文件结尾返回空字符串
# data = f.read(1024) #每次最多读100字符
# #  读到结尾跳出循环
# if not data:
# break
# print(data) # 读取一行内容
# data = f.readline(10) # 读取前10个字符
# print("一行内容:",data)
# data = f.readline() # 读完第一行剩余内容
# print("一行内容:",data) # 将内容读取为列表,每行为列表一个元素
# data = f.readlines(18) #前18个字符所在的行作为读取对象
# print(data) # f为可迭代对象
for i in f:
print(i) # 每次迭代到一行内容 # 关闭
f.close()

read.py

 """
file_write.py
文件写操作演示
""" # 打开文件
# f = open('test','w')
# f = open('img.jpg','wb')
f = open('test','a') # 追加 # 写操作
# f.write("hello 死鬼\n".encode())
# f.write("哎呀,干啥".encode()) # 将列表写入 人为添加换行
l = ['hello world\n','哈哈哈']
f.writelines(l) f.close()

write.py

1. 打开文件

```python
file_object = open(file_name, access_mode='r', buffering=-1)
功能:打开一个文件,返回一个文件对象。
参数:file_name  文件名;
     access_mode  打开文件的方式,如果不写默认为‘r’  
          文件模式                        操作
              r                    以读方式打开 文件必须存在
              w                    以写方式打开
                                   文件不存在则创建,存在清空原有内容  
              a                    以追加模式打开  
              r+                   以读写模式打开 文件必须存在
              w+                   以读写模式打开文件
                                   不存在则创建,存在清空原有内容
              a+                   以读写模式打开 追加模式
              rb                   以二进制读模式打开 同r
              wb                   以二进制写模式打开 同w
              ab                   以二进制追加模式打开 同a
              rb+                  以二进制读写模式打开 同r+
              wb+                  以二进制读写模式打开 同w+
              ab+                  以二进制读写模式打开 同a+
     buffering  1表示有行缓冲,默认则表示使用系统默认提供的缓冲机制。
返回值:成功返回文件操作对象。
```

>缓冲:系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存缓冲区,再由缓冲区送到磁盘中去。从磁盘中读数据,则一次从磁盘文件将一批数据读入到内存缓冲区中,然后再从缓冲区将数据送到程序的数据区。

2. 读取文件

>read([size])
>功能: 用来直接读取文件中字符。
>参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,给定size最多读取给定数目个字符(字节)。
>返回值: 返回读取到的内容
>* 注意:文件过大时候不建议直接读取到文件结尾,读到文件结尾会返回空字符串。

>readline([size])
>功能: 用来读取文件中一行
>参数: 如果没有给定size参数(默认值为-1)或者size值为负,表示读取一行,给定size表示最多读取制定的字符(字节)。
>返回值: 返回读取到的内容

>readlines([sizeint])
>功能: 读取文件中的每一行作为列表中的一项
>参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,给定size表示读取到size字符所在行为止。
>返回值: 返回读取到的内容列表

>文件对象本身也是一个可迭代对象,在for循环中可以迭代文件的每一行。
```python
for line in f:
     print(line)
```

3. 写入文件

>write(string)
>功能: 把文本数据或二进制数据块的字符串写入到文件中去
>参数:要写入的内容
>* 如果需要换行要自己在写入内容中添加\n

>writelines(str_list)
>功能:接受一个字符串列表作为参数,将它们写入文件。
>参数: 要写入的内容列表

4. 关闭文件

打开一个文件后我们就可以通过文件对象对文件进行操作了,当操作结束后使用close()关闭这个对象可以防止一些误操作,也可以节省资源。

>file_object.close()

5. with操作

python中的with语句使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会执行规定的“清理”操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。

with语句的语法格式如下:

```python
with context_expression [as target(s)]:
    with-body
```

通过with方法可以不用close(),因为with生成的对象在语句块结束后会自动处理,所以也就不需要close了,但是这个文件对象只能在with语句块内使用。

```python
with open('file','r+') as f:
    f.read()
```

>注意
>> 1. 加b的打开方式读写要求必须都是字节串
>> 2. 无论什么缓冲,当程序结束或者文件被关闭时都会将缓冲区内容写入磁盘

其他操作

刷新缓冲区

flush()

该函数调用后会进行一次磁盘交互,将缓冲区中的内容写入到磁盘。

文件偏移量

  1. 定义

打开一个文件进行操作时系统会自动生成一个记录,记录中描述了我们对文件的一系列操作。其中包括每次操作到的文件位置。文件的读写操作都是从这个位置开始进行的。

  1. 基本操作

tell()
功能:获取文件偏移量大小

seek(offset[,whence])
功能:移动文件偏移量位置
参数:offset 代表相对于某个位置移动的字节数。负数表示向前移动,正数表示向后移动。
whence是基准位置的默认值为 0,代表从文件开头算起,1代表从当前位置算起,2 代表从文件末尾算起。

  • 必须以二进制方式打开文件时基准位置才能是1或者2

文件描述符

  1. 定义

系统中每一个IO操作都会分配一个整数作为编号,该整数即这个IO操作的文件描述符。

  1. 获取文件描述符

    fileno()
    通过IO对象获取对应的文件描述符

文件管理函数

  1. 获取文件大小

os.path.getsize(file)

  1. 查看文件列表

os.listdir(dir)

  1. 查看文件是否存在

os.path.exists(file)

  1. 判断文件类型

os.path.isfile(file)

  1. 删除文件

os.remove(file)

IO,文件的更多相关文章

  1. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  2. 文件IO 相关的包:java.io文件——API

    文件IO 相关的包:java.io文件——API 1.Java.io.File类的使用(1)两种路径绝对路径:相对于当前路径:当前为 “工程名”(2)File类创建,对象为一个文件/目录,可能存在或不 ...

  3. 一头扎进 Java IO中-------java IO文件

    Java IO: 文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这篇文章不会对每一个技术细节都做出解释,而是会针对文件存 ...

  4. Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...

  5. IO文件操作

    × 目录 [1]IO文件的操作 [2]Directory类 [3]File类 [4]FileStream类 [5]文本文件的操作 一.IO文件的操作:   .net中对文件操作,经常会用到这样几个类: ...

  6. winform IO文件操作

    最近做了一个查错工具,运用了winform文件操作的知识,做了几点总结,不全面,只总结了几点项目里用过的知识(关于以下内容只是个人的理解和总结,不对的地方请多指教,有补充的可以评论留言大家一起讨论学习 ...

  7. java IO 文件批量重命名

    java IO 文件批量重命名 package com.vfsd.renamefile; import java.io.File; import java.io.FileInputStream; im ...

  8. (Unity)XML文件读写与IO文件操作类使用介绍

    using System.Xml;                //xml文件操作命名空间 #region 写入操作 void WriteXMLFile(string _fileName) { Xm ...

  9. java Io文件输入输出流 复制文件

    package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  10. JAVA之IO文件读写

    IO概述:                                                          IO(Input output)流 作用:IO流用来处理设备之间的数据传输 ...

随机推荐

  1. #6392. 「THUPC2018」密码学第三次小作业 / Rsa (exgcd求逆元+快速幂+快速乘)

    题目链接:https://loj.ac/problem/6392 题目大意:给定五个正整数c1,c2,e1,e2,N,其中e1与e2互质,且满足 c1 = m^e1 mod N c2 = m^e2 m ...

  2. html5 像素模拟渐变

    代码实例: <!DOCTYPE html> <html> <head> <style> canvas{ background:#eee; } </ ...

  3. html5 实例渐变

    代码实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  4. bzoj3812 主旋律 容斥+状压 DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3812 题解 考虑对于图的联通性的 DP 的一般套路:总方案 - 不连通的方案. 那么我们只需要 ...

  5. BZOJ2280 [Poi2011]Plot 二分+倍增+最小圆覆盖

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2280 https://loj.ac/problem/2159 题解 显然对于一段的 \(q_i ...

  6. python运行windows终端程序

    其实是用python控制windows里的shell 1.windows有PowerShell,可以通过搜索打开,运行python不需要打开shell 2.用python里的subprocess函数, ...

  7. Vue通信的10种方式

    1.10种通信方式 10种:https://juejin.im/post/5bd18c72e51d455e3f6e4334 2.除此之外,还有children和ref. 需要注意 $children  ...

  8. Spring Boot 2.x:SpringBoot

    几个重要的事件回调机制: 1.配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunlisten ...

  9. Delphi 安装Cnpack cnvcl后界面不断弹出 Memory Manager's list capablity overflow ,please enlarge it!

    Delphi 安装Cnpack cnvcl后界面不断弹出 Memory Manager's list capablity overflow ,please enlarge it! 解决方法:删除指定  ...

  10. 从头开始开发一个vue幻灯片组件

    首先新建项目vue init webpack projectName 安装依赖包npm i这些就不说了 接下来就是构建我们的swiper组件 因为我写的代码不规范, 通不过eslint的检测, 会频繁 ...