python 小兵(4)之文件操作
文件操作
初始文件操作
使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了
根据打开方式的不同能够执行的操作会有相应的差异.
打开文件的方式:
r,w,a
r+,w+,a+
rb,wb,ab
r+b,w+b,a+b
默认使用的是r(只读模式)
只读操作(r/rb)
1
2
3
4
5
6
7
|
f = open ( '护士少妇萝莉' ,mode = 'r' ,encoding = 'utf-8' ) content = f.read() print (content) f.close() 结果: 标题很好 |
上边的内容open()函数打开护士少妇萝莉的文件,然后赋值到一个句柄中,open函数中的mode是对这个文件操作是的一种模式
encoding这个是指定文件中内容的编码集,接下来的操作就完全通过句柄来操作
1
2
3
4
5
6
7
|
f = open ( '护士少妇萝莉' ,mode = 'rb' ) content = f.read() print (content) f.close() 结果: b '\xe6\xa0\x87\xe9\xa2\x98\xe5\xbe\x88\xe5\xa5\xbd' |
rb 读出来的数据是bytes类型,在rb模式下,不能encoding字符集
rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用到rb,因为这种数据是没办法直接显示出来的
在后面我们文件上传下载的时候还会用到.
绝对路径和相对路径
1.绝对路径:从磁盘根目录开始一直到文件名
2.相对路径:用一个文件夹下的文件,相对于当前这个程序所在的文件而言.如果在同一个文件中,则相对路劲就是这个文件名.如果再上一层文件夹则要使用../
如果相对还是不能理解,来看下这列子:
你朋友要来找你,知道你在那个楼那一层但是不知道那个一个屋,现在你朋友来到这个楼里相对他知道的这一层然后开始找你在那个房间
这种操作就是相对路劲,例子中是通过这个楼中的这一层开始寻找,也就是相对于这个楼的某一层
我们更推荐大家使用相对路劲,因为我把这个程序的整个文件发给你的时候,就可以运行,如果使用绝对路径还需要额外的拷贝外部文件给你
读取文件的方法
read()将文件中的内容全部读取出来;弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃
1
2
3
4
5
6
7
8
9
10
11
|
f = open ( 'path1/小娃娃.txt' ,mode = 'r' ,encoding = 'utf-8' ) msg = f.read() f.close() print (msg) 结果: 高圆圆 刘亦菲 张柏芝 杨紫 王菲 |
read()读取的时候指定读取到什么位置,我们指定先读取前三个内容,然后在使用read()进行读取会继续向后读取,而不会从头开始读取
1
2
3
4
5
6
7
8
9
10
11
12
13
|
f = open ( 'path1/小娃娃.txt' ,mode = 'r' ,encoding = 'utf-8' ) msg = f.read( 3 ) msg1 = f.read() f.close() print (msg) print (msg1) 结果: 高圆圆 刘亦菲 张柏芝 杨紫 王菲 |
上边现在使用的是r模式这样读取的就是文字,如果使用rb模式读取出来的就是字节
1
2
3
4
5
6
7
8
9
10
|
f = open ( 'path1/小娃娃.txt' ,mode = 'rb' ) msg = f.read( 3 ) msg1 = f.read() f.close() print (msg) print (msg1) 结果: b '\xe9\xab\x98' b '\xe5\x9c\x86\xe5\x9c\x86\r\n\xe5\x88\x98\xe4\xba\xa6\xe8\x8f\xb2\r\n\xe5\xbc\xa0\xe6\x9f\x8f\xe8\x8a\x9d\r\n\xe6\x9d\xa8\xe7\xb4\xab\r\n\xe7\x8e\x8b\xe8\x8f\xb2' |
read()可以放我们读取多少内容,如果是r模式 read(3)就获取三个字,如果是rb模式 read(3)就获取三个字节
readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
f = open ( 'path1/小娃娃.txt' ,mode = 'r' ,encoding = 'utf-8' ) msg1 = f.readline() msg2 = f.readline() msg3 = f.readline() msg4 = f.readline() f.close() print (msg1) print (msg2) print (msg3) print (msg4) 结果: 高圆圆 刘亦菲 张柏芝 杨紫 Process finished with exit code 0 |
解决这个问题只需要在我们读取出来的文件后边加一个strip()就OK了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
f = open ( 'path1/小娃娃.txt' ,mode = 'r' ,encoding = 'utf-8' ) msg1 = f.readline().strip() msg2 = f.readline().strip() msg3 = f.readline().strip() msg4 = f.readline().strip() f.close() print (msg1) print (msg2) print (msg3) print (msg4) 结果: 高圆圆 刘亦菲 张柏芝 杨紫 |
readlines()读取的是每一行,存放到一个列表当中.
1
2
3
4
5
6
7
|
f = open( '小娃娃' ,mode= 'r' ,encoding= 'utf-8' ) msg1 = f.readlines() f.close() print(msg1) 结果: [ '高圆圆\n' , '刘亦菲\n' , '张柏芝\n' , '杨紫' ] |
如果有个较大的文件我们进行读取不推荐使用以下方法:
1
2
|
f = open ( '../path1/弟子规' ,mode = 'r' ,encoding = 'utf-8' ) print (f.read()) #这样就是将文件一次性全部读取到内存中,内存容易奔溃 |
推荐使用的是这种方法:
1
2
3
4
5
6
7
8
|
f = open ( '../path1/弟子规' ,mode = 'r' ,encoding = 'utf-8' ) for line in f: print (line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能 print (f.readline()) print (f.readline()) print (f.readline()) print (f.readline()) |
注意点:读完的文件句柄一定要关闭
写模式(w,wb)
在写文件的时候我们要养成一个写完文件就刷新的习惯. 刷新flush()
1
2
3
4
5
6
|
f = open ( '../path1/小娃娃.txt' ,mode = 'w' ,encoding = 'utf-8' ) f.write( '太白很白' )f.flush() f.close() 结果: 当我选择使用w模式的时候,在打开文件的时候就就会把文件中的所有内容都清空,然后在操作 |
注意点:如果文件不存在使用w模式会创建文件,文件存在w模式是覆盖写,在打开文件时会把文件中所有的内容清空.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
f1 = open ( '../path1/小娃娃.txt' ,mode = 'r' ,encoding = 'utf-8' ) msg = f1.read() print (msg) # 这个是先查看小娃娃文件中有哪些内容 f = open ( '../path1/小娃娃.txt' ,mode = 'w' ,encoding = 'utf-8' ) f.write( '太白很白' )f.flush() f.close() # 这个是对小娃娃文件进行覆盖写操作 f1 = open ( '../path1/小娃娃.txt' ,mode = 'r' ,encoding = 'utf-8' ) msg = f1.read() print (msg) # 查看覆盖写后的内容 |
尝试读一读
1
2
3
4
5
6
7
8
9
|
f1 = open ( '../path1/小娃娃.txt' ,mode = 'w' ,encoding = 'utf-8' ) msg = f1.read() print (msg) 结果: Traceback (most recent call last): File "D:/python_object/path2/test.py" , line 563 , in <module> msg = f1.read() io.UnsupportedOperation: not readable #模式是w,不可以执行读操作 |
wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换成utf-8的bytes数据
1
2
3
4
5
|
f = open ( '../path1/小娃娃.txt' ,mode = 'wb' ) msg = '你好' .encode( 'utf-8' ) f.write(msg) f.flush() # 刷新 f.close() |
python 小兵(4)之文件操作的更多相关文章
- python 小兵(4)之文件操作 小问题
1.光标不对就用seek 2.文件操作方面注意不要变修改变删除,会爆出文件正在运行不能操作 3.w模式下只有开始打开的时候会清空 4.文件操作的时候用as 后面的参数进行操作,不能用文件名进行操作 5 ...
- Python基础7:文件操作
[ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...
- python函数基础 与文件操作
函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...
- Python 第三天 文件操作(2)
文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和 fi ...
- python学习笔记4(文件操作)
文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”) 直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...
- python学习笔记-(七)python基础--集合、文件操作&函数
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
- python学习笔记三 文件操作(基础篇)
文件操作 打开文件 open(name[,mode[,buffering]]) open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉] w ...
- python 函数初识和文件操作
文件操作 打开文件:文件句柄 = open('文件路径', '模式') 打开文件的模式 w #以写的方式打开 (不可读,不存在则创建,存在则删除内容) a #以追加的模式打开(可读, 不存在则创建 ...
随机推荐
- 【LeetCode】671. Second Minimum Node In a Binary Tree 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 找出所有值再求次小值 遍历时求次小值 日期 题目地址 ...
- 【LeetCode】129. Sum Root to Leaf Numbers 解题报告(Python)
[LeetCode]129. Sum Root to Leaf Numbers 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/pr ...
- hbase构建二级索引解决方案
关注公众号:大数据技术派,回复"资料",领取1024G资料. 1 为什么需要二级索引 HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索.假设我们相对Hbas ...
- CSS实现鼠标移入时图片的放大效果以及缓慢过渡
transform:scale()可以实现按比例放大或者缩小功能. transition可以设置动画执行的时间,实现缓慢或者快速的执行动画,效果图如下: 源码: <!DOCTYPE html&g ...
- 手机端h5页面 图片根据手势放大缩小
pinchzoom.js 这个插件可以简单的实现这一功能 <div class="big_pos_img page"> <div class="pinc ...
- 基于Java swing+mysql+eclipse的【水电费管理系统】
本项目为前几天收费帮学妹做的一个项目,Java swing项目,在工作环境中基本使用不到,但是很多学校把这个当做编程入门的项目来做,故分享出本项目供初学者参考. CSDN9.9赞助下载: https: ...
- Java初学者作业——编写Java程序,输入一个数字,实现该数字阶乘的计算。
返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个数字,实现该数字阶乘的计算.一个数字的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! .例如,5的阶乘等于1*2*3*4* ...
- Oracle数据库用法汇总
一些Oracle数据库用法的小总结 1.使用insert into创建新表 insert into destdb.sub_contract (userid,contractid) select msi ...
- Unity——火烧+水波纹效果(噪音图)
使用噪声图实现火烧和水波纹效果: 1.溶解 关闭裁剪,根据noise纹理取样,r通道和_BurnAmount比较,裁剪掉小于_BurnAmount的片元: 通过菲尼尔得到裁剪边缘,添加火焰燃烧的颜色进 ...
- Oracle 五种约束的创建和移除:
1.主键约束: 创建表的时候就添加: create table table_name (categoryId varchar2(10), categoryName varchar2(30), prim ...