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)关闭文件 现有 ...
随机推荐
- 利用python写一个简单的小爬虫 爬虫日记(1)(好好学习)
打开py的IDLE >>>import urllib.request >>>a=urllib.request.urlopen("http://www.ba ...
- div 初始高度,并随内容高度变化
前几天做个邮箱系统,其中在内容的div设置了高度为200px; 可是在内容大于200高度后就出现了内容的溢出. 如图: 查完资料够才知道css有个min-height; 设置div的初始化高度,设置属 ...
- js分享功能
引用JiaThis的分享功能: 直接在想要放置分享功能的地方加上如下代码即可: <!-- JiaThis Button BEGIN --> <div class="jiat ...
- ZOJ 1403&&HDU 1015 Safecracker【暴力】
Safecracker Time Limit: 2 Seconds Memory Limit: 65536 KB === Op tech briefing, 2002/11/02 06:42 ...
- HUST 1588 辗转数对
1588 - 辗转数对 时间限制:1秒 内存限制:128兆 155 次提交 27 次通过 题目描述 假设当前有一个数对(a, b),我们可以通过一步将这个数对变为一个新数对(a + b, b)或者是( ...
- Codeforces 626D Jerry's Protest(暴力枚举+概率)
D. Jerry's Protest time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- 状压dp入门第一题 poj3254
题目链接 http://poj.org/problem?id=3254 转自http://blog.csdn.net/harrypoirot/article/details/23163485 #inc ...
- You can Solve a Geometry Problem too(线段求交)
http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2000 ...
- C/C++之循环结构
C语言中提供四种循环,即goto循环.while循环.do…while循环和for循环.四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经 ...
- MyBatis工作原理
Mybatis工作原理: 我们的应用程序通过mybatis提供的api,增删改查方法来访问数据库,api底层调用了jdbc ,只不过mybatis对jdbc的封装是不完全封装,里面的sql语句需要我们 ...