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)关闭文件 现有 ...
随机推荐
- SpringBoot入坑-持久化操作
前面内容中我们已经了解到了SpringBoot关于参数传递的相关知识,本篇我们一起来学习一下SpringBoot关于数据库持久化操作的知识,这里我们使用JPA进行数据库的持久化操作. 首先由于我们需要 ...
- python对pywifi模块的认识
pywifi是一个用来搞wifi的模块 下一章我们将用他破解wifi密码 pywifi安装 pip install pywifi 下列代码判断是否有无限网卡 import pywifi import ...
- deeplearning.ai 卷积神经网络 Week 3 目标检测 听课笔记
本周的主题是对象检测(object detection):不但需要检测出物体(image classification),还要能定位出在图片的具体位置(classification with loca ...
- cs231n spring 2017 Python/Numpy基础 (1)
本文使根据CS231n的讲义整理而成(http://cs231n.github.io/python-numpy-tutorial/),以下内容基于Python3. 1. 基本数据类型:可以用 prin ...
- bzoj usaco 金组水题题解(2.5)
bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...
- c++(快速排序)
快速排序是编程中经常使用到的一种排序方法.可是很多朋友对快速排序有畏难情绪,认为快速排序使用到了递归,是一种非常复杂的程序,其实未必如此.只要我们使用好了方法,就可以自己实现快速排序. 首先,我们复习 ...
- iOS项目——项目开发环境搭建
在开发项目之前,我们需要做一些准备工作,了解iOS扩展--Objective-C开发编程规范是进行开发的必备基础,学习iOS学习--Xcode9上传项目到GitHub是我们进行版本控制和代码管理的选择 ...
- 用于 C♯ 图像识别的轮廓分析技术
用于 C♯ 图像识别的轮廓分析技术 供稿:Conmajia 标题:Contour Analysis for Image Recognition in C# 作者:Pavel Torgashov 此中文 ...
- SAX解析原理示意
SAX解析原理示意
- SVN版本库修改URL路径或者IP地址
服务器的IP地址或者URL变更,版本库服务器的IP也要修改,因为当初安装SVN URL没有使用别名,所以使用的人都要修改客户端的IP,以下是参考网上的资料. 1.Windows TortoiseSVN ...