Python面向对象之文件操作
文件的概念
文件的概念和作用
- 计算机的文件,就是存储在某种长期存储设备上的一段数据;长期存储设备包括:U盘,硬盘,移动硬盘,光盘,等;
- 文件的作用:将数据长期保存,在需要的时候使用;
文件的存储方式
在计算机中,文件是以二进制的形式保存在磁盘上的;
文本文件和二进制文件
文本文件
- 可以用文本编辑软件查看;
- 本质上还是二进制文件;
例如:python源文件。
二进制文件
- 保存的文件不是直接给人阅读的,而是提供给其他软件使用的;
- 二进制文件不能会用文本编辑软件查看;
例如:图片文件,音频文件等
文件的基本操作
文件操作步骤
在计算机中操作文件的步骤时分固定,一共包含三个步骤:
- 打开文件;
- 读,写文件;读:将文本内容读入内存;写:将内存内容写入文本;
- 关闭文件;
操作文件的方法/函数
在python中操作文件需要记住一个函数和两个方法
序号 | 函数/方法 | 说明 |
---|---|---|
1 | open | 打开文件,返回文件操作对象; |
2 | read | 将文件内容读取到内存; |
3 | write | 将指定内容写入到文件; |
4 | close | 关闭文件; |
- open函数负责打开文件,返回文件操作对象;
- 其余三个方法需要通过文件对象调用;
read方法-读取文件
open函数的第一个参数是要打开的文件名(文件名区分大小写);
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
read方法可以一次性读入并返回文件的所有内容;
close方法负责关闭文件;
如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问;
注意:read方法执行后,会把文件指针移动到文件的末尾;
提示:在开发中,通常会先编写打开和关闭的代码,再编写中间针对文件的读写操作;
读取文件示例
# 打开文件
file = open("hello.txt")
# 读取文件
text = file.read()
print(text)
# 关闭文件
file.close()
# welcome to hello.txt
# this is a test file.
文件指针
- 文件指针标识 从哪个位置开始读取数据;
- 第一次打开文件时,通常文件指针会指向文件的开始位置;
- 当执行了read方法后,文件指针会移动到读取内容的末尾;默认情况下会移动到文件末尾;
所以,如果在同一次打开文件中,执行了一次read方法,读取所有内容,再次调用read方法的话,就不能够再获得内容了;这是因为第一次读取之后,文件指针移动到了文件末尾,再次调用不会读取到任何的内容;
文件指针示例
# 打开文件
file = open("hello.txt")
# 读取文件
text = file.read()
print(text)
print(len(text))
print("-"*50)
# 再次读取文件
text1 = file.read()
print(text1)
print(len(text1))
# 关闭文件
file.close()
# welcome to hello.txt
# this is a test file.
# 42
# --------------------------------------------------
# 0
open函数-打开文件的方式
open函数默认以只读方式打开文件,并且返回文件对象
open函数语法如下:
f = open("文件名", "访问方式")
open打开文件情况罗列
访问方式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。如果文件不存在,抛出异常 |
w | 以只写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件 |
a | 以追加方式打开文件。如果文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入。 |
r+ | 以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常。 |
w+ | 以读写方式打开文件。如果文件村子会被覆盖。如果文件不存在,创建新文件。 |
a+ | 以读写方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入。 |
打开方式其实还有"rb","wb","wb+",...等,这是针对二进制文件的方式。
提示
- 频繁的移动文件指针,会影响文件的读写效率,开发中更多的时候会以只读,只写的方式来操作文件。
追写文件示例
file = open("hello.txt", "a")
file.write("hello world")
file.close()
按行读取文件内容
- read方法默认会把文件的所有内容一次性读取到内存;
- 如果文件太大,对内存的占用会非常严重。
readline方法
- readline方法可以一次读取一行内容;
- 方法执行后,会把文件指针移动到下一行,准备再次读取;
读取指定行数数据
file = open("hello.txt")
line1 = file.readline()
print(line1)
line2 = file.readline()
print(line2)
file.close()
# 1.welcome to hello.txt
# 2.this is a test file.
分行读取整个文件:
hello.txt内容
1.welcome to hello.txt
2.this is a test file.
3.hello world
readline_test.py内容
file = open("hello.txt")
while 1:
line = file.readline()
print(line, end="")
if not line:
break
file.close()
# 运行结果
# 1.welcome to hello.txt
# 2.this is a test file.
# 3.hello world
小文件复制示例
# 打开文件
read_file = open("hello.txt")
write_file = open("hello_small.txt", "w")
# 读写文件
text = read_file.read()
write_file.write(text)
# 关闭文件
read_file.close()
write_file.close()
大文件复制示例
# 打开文件
read_file = open("hello.txt")
write_file = open("hello_big.txt", "w")
# 读写文件
while 1:
# 读取一行内容
text = read_file.readline()
# 判断是否有内容
if not text:
break
# 写入复制文件
write_file.write(text)
# 关闭文件
read_file.close()
write_file.close()
文件/目录的常用管理操作
- 在终端/文件浏览器中,可以执行常规的文件/目录管理操作,例如:创建,重命名,删除,改变路径,查看目录内容等等。
- 在Python中,如果希望通过程序实现上述功能,需要导入os模块。
文件操作方法罗列
序号 | 方法名 | 说明 | 示例 |
---|---|---|---|
01 | rename | 重命名文件 | os.rename(源文件名,目标文件名) |
02 | remove | 删除文件 | os.remove(文件名) |
目录操作方法罗列
序号 | 方法名 | 说明 | 示例 |
---|---|---|---|
01 | listdir | 目录列表 | os.listdir(目录名) |
02 | mkdir | 创建目录 | os.mkdir(目录名) |
03 | rmdir | 删除目录 | os.rmdir(目录名) |
04 | getcwd | 获取当前目录 | os.getcwd() |
05 | chdir | 修改工作目录 | os.chdir(目标目录) |
06 | path.isdir | 判断是否是文件 | os.path.isdir(文件路径) |
提示:文件/目录操作都支持绝对路径/相对路径
文本文件的编码格式
- 文本文件存储的内容是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等;
- python2.x默认使用ASCII编码;
- python3.x默认使用UTF-8编码;
ASCII编码和UNICODE编码
ASCII编码
- 计算机中只有256个ASCII字符;
- 一个ASCII在内存中占用1个字节的空间;而8个0/1的排列组合方式一共有256中,也就是2**8
UTF-8编码
- 计算机中使用的1-6个字节来表示一个utf-8字节,涵盖了地球上几乎所有地区的文字;
- 大多数汉字会使用3个字节来表示;
- utf-8是UNICODE编码的一种编码格式。
python2.x中使用中文
在python2.x文件的第一行增加以下代码,解释器会以utf-8编码来处理python文件;
# *-* coding:utf8 *-*
上面这种是官方推荐使用的,也可以使用下面这种方式:
# coding=utf8
unicode字符串前加u
- 在python2.x中,即使指定了文件使用utf-8的编码格式,但是在遍历字符串时,仍然会以字节为单位遍历字符串;
- 要能够正确的遍历字符串,在定义字符串时,需要在字符串的引号前,增加一个小写字母u,告诉解释器这是一个unicode字符串(使用utf-8编码格式的字符串)。
例如下面的代码:
test_str = "hello世界"
print(test_str)
在2和3下都会正确执行,但是当我们遍历输出字符串时,就会出现不一样的情况;
test_str = "hello世界"
print(test_str)
for i in test_str:
print(i)
在python3中可以正常执行以上代码;
但是在python2中,可以输出完整字符,遍历时输出的结果中"世界"显示的是六行特殊字符;
解决为 定义字符串时,需要在字符串的引号前,增加一个小写字母u。
示例如下:
test_str = u"hello世界"
print(test_str)
for i in test_str:
print(i)
Python面向对象之文件操作的更多相关文章
- python 历险记(三)— python 的常用文件操作
目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- Python的高级文件操作(shutil模块)
Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...
- Python入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- Python之常用文件操作
Python之常用文件操作
- 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...
- Python开发【第三篇】:Python基本之文件操作
Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和 file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...
- python基础之文件操作
对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...
随机推荐
- 第二篇 .NET高级技术之密闭类和静态类及扩展方法
1.密闭类是修饰为sealed的类, sealed不能有子类.一般只有系统中的一些基本类声明为sealed.面试题:是否可以编写一个类继承自String类? 答:不能,因为string被声明为了sea ...
- Java反编译工具-JD-GUI
Java是跨平台的,JD-GUI提供了多个系统的支持,但是不建议直接安装,最快的方式推荐直接下载JAR包,然后用java -jar进行运行. 就现在的版本是1.4.0,停留在2015年,估计近期会更新 ...
- SpringBoot 整合SpringMVC 原理探究
https://blog.csdn.net/cml_blog/article/details/70196572 Spring Web MVC 的配置 Bean :WebMvcProperties
- DFS/并查集 Codeforces Round #286 (Div. 2) B - Mr. Kitayuta's Colorful Graph
题目传送门 /* 题意:两点之间有不同颜色的线连通,问两点间单一颜色连通的路径有几条 DFS:暴力每个颜色,以u走到v为结束标志,累加条数 注意:无向图 */ #include <cstdio& ...
- 学习JavaScript数据结构与算法 (一)
学习JavaScript数据结构与算法 的笔记, 包含一二三章 01基础 循环 斐波那契数列 var fibonaci = [1,1] for (var i = 2; i< 20;i++) { ...
- freertos之特点
主要特点:协程(co-routine):任务间的中断通信机制 支持可抢占式/协作式任务调度 .FreeRTOS-MPU 内核对象可以动态或静态分配 ...
- python对ini配置文件处理
实例文件: [root@docker2 ~]# cat test.ini [base] host = 192.168.88.121 port = 3306 user = root path = /ho ...
- AJPFX关于枚举,泛型详解
枚举类型是JDK5.0的新特征.Sun引进了一个全新的关键字enum来定义一个枚举类.下面就是一个典型枚举类型的定义:public enum Color{RED,BLUE,BLACK,YELLOW,G ...
- 利用贝塞尔曲线绘制(UIBezierPath)自定义iOS动态速度表,可以自定义刻度,刻度值,进度条样式
GitHub的Demo下载地址 使用UIBezierPath画图步骤: 创建一个UIBezierPath对象 调用-moveToPoint:设置初始线段的起点 添加线或者曲线去定义一个或者多个子路径 ...
- 教你如何配置WampServer
httpdconfig 搜索deny 268行 Deny 换成Allow 在本机cmd 搜索 ipconfig 找到 本机的ip 地址 239 行 DocumentRoot "e:/mywe ...