11_Python文件操作
一、文件操作的基本流程
计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程。
操作一个文件首先思考都需要哪些参数:
- 文件所在的路径,如:d:\test.txt
- 读取文件所使用的编码
- 操作方式:读、写、追加...
- 关闭文件,释放资源
读取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文件操作的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
随机推荐
- dotnet core cli 命令
1 dotnet new 2 创建code 程序 dotnet new console using System; namespace cli { class Program { static voi ...
- HDU 2037 今年暑假不AC(贪心,区间更新,板子题)
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- C++ STL之min_element()与max_element()(取容器中的最大最小值)
min_element()和max_element 头文件:#include<algorithm> 作用:返回容器中最小值和最大值.max_element(first,end,cmp);其 ...
- Uva 10339 - Watching Watches【数论,暴力】
题目链接:10339 - Watching Watches 题意:两个时钟,一个每天慢a秒,一个每天慢b秒,问两钟重新相遇的时刻 1圈有12 * 60 * 60秒,然后1圈 / abs(a - b), ...
- 迷宫问题(bfs+记录路径)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105278#problem/K K - 迷宫问题 Time Limit:1000 ...
- timeit模块
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址 ...
- 解决不同操作系统下git换行符一致性问题
一.不同操系统下的换行符CR回车 LF换行Windows/Dos CRLF \r\nLinux/Unix LF \nMacOS CR \r二.解决方法 打卡git bash,设置core.autocr ...
- Oracle:控制语句 IF..ELSIF语句、CASE语句、FOR循环语句
--多重if语句(注意点:BEGIN END ,IF 条件 THEN,ELSIF 条件 THEN,ELSE... END IF)BEGIN IF FALSE THEN DBMS_OUTPUT.put_ ...
- tp系统常量定义
(2013-03-06 14:16:31) 转载▼ 标签: it 是已经封装好的系统常量 主要是用在控制器下面的动作当中 这样能很大的提高我们的开发效率 主要有下面的一些 手册上面都有的 ...
- Struts2------Result处理&获取页面请求参数&API
一.Result处理 1.1 说明 平常我们设置跳转页面,是在action标签里面加上 result标签来控制,这种设置的页面跳转,称之为 局部结果页面:但是我们有时候在很多个action里面,针对不 ...