一、文件操作的基本流程

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程。

操作一个文件首先思考都需要哪些参数:

  1. 文件所在的路径,如:d:\test.txt
  2. 读取文件所使用的编码
  3. 操作方式:读、写、追加...
  4. 关闭文件,释放资源

读取d:\test.txt文件,保存格式utf-8:

#在Python中,我们通过open()获得一个文件句柄,然后我们利用文件句柄实现对文件的操作
f = open('d:\\test.txt',encoding='utf-8',mode='r')
content = f.read() #读取文件内容
f.close()
print(content)

二、文件编码

f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

#这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f=open('a.txt','r',encoding='utf-8')

三、文件打开模式

文件句柄 = open(文件路径,操作方式,编码)

'''
1.对于文本文件的读取:
r:只读模式
w:只写模式
a:追加模式 2.对于非文本文件的读取:
rb:以二进制只读模式
wb:以二进制只写模式
ab:以二进制追加模式 3.+ 就是代表了功能增强
r+:以读写的模式打开
w+:以读写模式打开
a+:以读写模式打开 4.以bytes类型操作的模式
rb+/r+b 以二进制读写模式打开
wb+/w+b 以二进制读写模式打开
ab+/a+b 以二进制读写模式打开
'''
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

四、文件操作方法

4.1常用操作方法

 #1.read() 整体读取出来
f = open('d:\\test.txt',encoding='utf-8')#r可以省略
content = f.read()
print(content) #2.readline()读取一行
f = open('d:\\test.txt',encoding='utf-8')
line1 = f.readline() #一次只读取一行内容
line2 = f.readline()
print(line1)
print(line2) #3.readlines() 读取,把每一行作为列表元素,返回一个列表
li = []
f = open('d:\\test.txt',encoding='utf-8')
li = f.readlines()
print(li)#['This is a file.\n', 'Python3 file Operate method.\n'] #4.readable()
f = open('d:\\test.txt',encoding='utf-8')
l = f.readable() #是否可读
print(l) #5.读取大文件,如果一个文件为16G,远远超过了我们普通电脑的内存大小,怎么读
f = open('d:\\test.txt',encoding='utf-8')
for i in f: #文件句柄,一行一行的读
print(i) #6.读取n个字符, 在rb模式下,按照字节读
f = open('d:\\test.txt',encoding='utf-8',mode='r')
content = f.read(3)
print(content) #Thi 中华人 # rb 模式下 不用 encoding='UTF-8'
f = open('d:\\test.txt',mode='rb')
content = f.read(3)
print(content) #b'\xe4\xb8\xad'
print(b'\xe4\xb8\xad'.decode('utf-8')) #中

4.2只写操作

 f = open('d:\\test.txt',mode='w',encoding='utf-8')
if f.writable(): #判断文件是否可写
f.write('新内容') #如果文件存在,把原内容覆盖;如果文件不存在,创建文件,写入内容
if f.readable(): #不可以读,所以无打印
print(f.read())

4.3追加操作

 f = open('d:\\test.txt',mode='a',encoding='utf-8')
if f.writable():#判断是否可写
f.write("追加的内容") #如果文件存在,在原内容后追加;如果文件不存在,创建文件,写入内容
if f.readable():#判断是否可读 ,不可读
f.read(f.read())

五、光标移动

seek()、tell()、truncate()光标移动都是以字节为单位的。

1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。

seek()

seek() 方法用于移动指针(文件读取指针)到指定位置。

tell()

truncate()

  

11_Python文件操作的更多相关文章

  1. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  2. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  3. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  4. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  5. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  6. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  7. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  8. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

  9. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

随机推荐

  1. 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. Legal or Not(拓扑排序判环)

    http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Others)   ...

  3. angular1项目打包app及logo和启动图片的设置

    打包思想:ionic和angular混合开发app,那么纯angular1的项目也是可以打包出来. 技术需要:安装一个新的ionic2的项目,环境配置成功,这里打包的配置需要 http://www.c ...

  4. 启动时候报错由于没有扫包 error creating bean with name

    <!-- 扫描包,加载service实现类 --> <context:component-scan base-package="com.taotao.search.serv ...

  5. [国嵌攻略][179][OpenSSL加密系统]

    未加密传输的安全弊端 如果在网络传输中没有加密,就是以明文传输.传输的数据可以被抓包软件直接截获,并能读取里面的数据. 加密基本原理 1.对称加密 2.非对称加密 2.1.公钥私钥 公钥和私密要配对. ...

  6. [国嵌攻略][059][2440-DMA程序设计]

    初始化DMA控制器 1.设置源地址 DISRC(0x4B000000)设置为发送数据的源地址,DISRCC0(0x4B0000004)设置为内存AHB总线,目的地址增长 2.设置目的地址 DIDST0 ...

  7. zzuli oj 1134 字符串转换

    题目链接: https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1134 Description 输入一个以回车结束的字符串,它由数字和字母组成,请过滤掉 ...

  8. EF+MVC学习中的不理解的问题

    1.之所以被定义为virtual便于实现延迟加载 代码: public virtual ICollection<Enrollment> Enrollments { get; set; } ...

  9. 豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(8)- 镜像文件(.bin/.hex/.s19)

    大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是豹哥<ARM Cortex-M开发之文件详解>主 ...

  10. Eclipse报错An internal error occurred during: "J2EE Component Mapping Update". java.lang.NullPointerException

    Eclipse每次打开.java文件时,报错信息如下: An internal error occurred during: "J2EE Component Mapping Update&q ...