python成长之路第一篇(5)文件的基本操作
一、三元运算
我们在上章学习的if,,else,,有一种简便的方法
他的表达式是这样的:变量 = 值1 if 条件 else 值2
解释过来就是如果aaa等于sss则输出值1否则输出值2
二、类的概念
类是面向对象编程的核心, 它扮演相关数据及逻辑的容器角色。它们提供了创建“真实”
对象(也就是实例)的蓝图。对于Python,一切事物都是对象,对象基于类创建。
如何查询对象的类呢?
为啥分为有下划线和没下划线的呢,这些又是什么呢?本例中以查看的是列表的类,那么这个类下面就有了很多的方法也就是下面看到的,带下划线的为内置方法,不带下划线的非内置方法只能表示一种方式,只能执行一种方式。也就是说这个变量是列表类型的就能使用这个列表类的所有方法
type:查看对象的类型
dir(类型名)查看类中提供的功能
help(类型名)查看类中所有详细的功能
help(类型名.功能名称)查看类中某功能的详细信息
这里只是了解一下至于功能后续会有专门的文章写
Pycharm看类的方法:
三、文件操作
python是怎么操作文件的呢?我们一起来看一下,一般来说对文件的操作有这么几种读写追加
open函数
不同模式打开文件的完全列表:
模式 描述 r
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 r+
打开一个文件用于读写。文件指针将会放在文件的开头。 rb+
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 w
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb
以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 w+
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb+
以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
(1)打开文件
foo = open('test','r') #open是关键字,test是文件的名称,r是打开的模式为只读print(foo)<_io.TextIOWrapper name='test' mode='r' encoding='cp936'>
哦?返回的是什么东东,原来在打开文件后,foo的值等于一个迭代器,迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。迭代器不能回退,只能往前进行迭代。
那怎么能够看到里面的内容呢?非常简单
(2)加载文件内容到内存
read()函数:
foo = open('test','r')
foo = foo.read()
print(foo)只需要foo 等于foo.read(),read函数的作用就是从一个打开的文件中读取一个字符串。
据说有人不喜欢read方式来读取文件!!这是为什呢呢?
因为:
read()的机制是将文件内容一股脑的读入内存,满足不了大家的需求
所以出现了readlines()一次性加载所有内容到内存,并按照行分割,合成列表
readlines()
foo = open('test','r')
ss = foo.readlines()
print(ss)['a\n', 'bb\n', 'ccc\n', 'dddd\n', 'eeeee']纳尼\n是毛毛啊,哦原来是换行符吓老子一跳,还有人说了 我就1M的内存读1G的文件,你不是要我命么,没关系python还有另外的方法来处理文件readline()每次仅读取一行数据,这样我们就可以for循环,处理到要处理的内容退出就好了foo = open('test','r+')
ss = foo.readline()
dd = foo.readline()
print(ss+dd)a
bb(3)读取中文文件
有勤快的小同学就试了试,尼玛为啥中文文件就报错呢?其实呢,不是你写错的而是编码问题
①编码与解码
对于中文文件编码格式为gbk,所以在正常的情况下我们使用Pycharm进行调试时用的是uft-8的编码格式所以会报错
我们知道我们现在一般接触三种编码格式分别是,gbk,utf-8,unicode
unicode:万国码Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
utf-8:UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言
GBK:是汉字编码标准之一中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订
那么他们之间的关系是什么样的呢,其实主需要记住一点就好,gbk,utf-8它的源是unicode,所以呢请看下图
decode是解码,encode是编码,也就是gbk想要转换成utf-8就需要先把gbk解码成unicode,然后unicode在编码成utf-8,我们来试一下
②python2.7和3.5正常输出中文的多种方法
这些方法主要目的都是为了把编码变成utf-8
python2.7:
方法1:在pycharm项目目录下用windows创建一个txt文件
foo = open('ttt.txt','r')
ss = foo.read().decode('gbk')
print ss一
二二三三三
四四四四
五五五五五
六六六六六六
python3.5:
0.0是不是很郁闷他自己就可以不需要变换编码
foo = open('ttt.txt','r')
ss = foo.read()
print (ss)codecs函数重点来了:不管是2.7还是3.5有一些特殊的情况无法输出中文字符则我们用到codecs这个函数
调用了codecs函数后:
其实呢方法很简单激素codecs这个函数也提供了open的方法,只需要codecs.open(‘文件名’,’打开模式’,’编码格式’)就好了。注意:
使用pycharm切换2.7和3.5的时候可能出现混乱建议实际测试为准(4)写入操作python提供了这么多种打开方式,其实常用不没有几个r,r+,w,w+,a,a+我们一一来看①r+啥情况我前面的东西呢!!,额好吧全被替换掉了(推荐测试使用linu毕竟都是运行在linux中)
![]()
②w,汗以前的内容全被替换掉了,w+就不用测试了吧
![]()
③a哦原来追加到最后了为毛不换行!在前面加个\n试试
![]()
![]()
(5)删除
对于python来说没有提供直接删除文件内容的功能,所以只能使用语句来判断(反正我是不知道)例子:反正是特别麻烦后面可以使用with 来优化一下我来解释一下,首先打开文件,for当i的内容等于ccc\n的情况下什么也不做,否则添加入列表,因为有换行符所以有\n,最后用w+打开文件把列表中的内容写入进去即可foo = open('text','r')
aa = foo.readlines()
ccc = []
for i in aa:
if i == 'ccc\n':
continue
else:
ccc.append(i)
foo.close() foe= open('text','w+')
for iss in ccc:
foe.write(iss)
foo.close()删除
(6)file对象的属性以下是和file对象相关的所有属性的列表:
例子:fo = open("foo.txt", "r+")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace结果:文件名: foo.txt
是否已关闭 : False
访问模式 : wb
末尾是否强制加空格 : 0(7)文件定位
大家看到上面的打开方式的列表中有一个这样的词语‘指针’,那么这个指针就类似于光标定位的位置,所以在python中,就有这个定位的操作
原文件text
aaa
bbb
ddd
fff①打开文件,为什这里只输出了aaa bb呢,是因为read()后面加了个指针,指到了6,所以输出了这个,有人还问了那指到了6应该输出三个b啊现在怎么是两个呢,其实呢是因为你妹的还有个换行符占了个位置
foo = open('text','r+')
aa = foo.read(6)
print(aa)
aaa
bb文件定位-打开文件
② 查找当前位置tell()foo = open('text','r+')
aa = foo.read(3)
ss = foo.tell()
print(aa,ss)③把指针再次重新定位到文件开头foo = open('text','r+')
aa = foo.read(3)
print(foo.tell())
print(aa)
foo.seek(0, 0)
print(foo.tell())
3
aaa
0重新定位指针
python成长之路第一篇(5)文件的基本操作的更多相关文章
- PYthon成长之路第一篇(1)__字符串初识
今天一起走进python的代码世界,一起领悟python的魅力 在很多学习python的书中都会以 print “Hello,world!” 这样的而一个程序为开始,那么其中的 hello,worl ...
- Python成长之路第一篇(3)_初识字典
经过上章的学习我们已经了解到了列表可以通过索引来获取对应的值,在本章我们将学到通过名字来索引数据,这种结构的类型称之为映射(maooing),在Python中字典是唯一内建的映射类型,其中的值我们称之 ...
- Python成长之路第一篇(4)_if,for,while条件语句
有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...
- Python成长之路第一篇(2)-初识列表和元组
可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...
- Python成长之路第一篇(2)__初识列表和元组
可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...
- 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)
2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...
- Python人工智能之路 - 第一篇 : 你得会点儿Python基础
Python 号称是最接近人工智能的语言,因为它的动态便捷性和灵活的三方扩展,成就了它在人工智能领域的丰碑 走进Python,靠近人工智能 一.编程语言Python的基础 之 "浅入浅出&q ...
- python成长之路——第一天
一.python版本间的差异: 1.1:2.x与3.x版本对比 version 2.x 3.x print print " "或者print()打印都可以正常输出 只能print( ...
- Python成长之路第二篇(1)_数据类型内置函数用法
数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> a ...
随机推荐
- JSP 实现 之 读取数据库显示图片
用JSP从数据库中读取图片并显示在网页上 环境mysql+tomcat: <1>先在mysql下建立如下的table. 并insert图像. mysql.sql文件如下: ) unsign ...
- mysql三张表关联查询
三张表,需要得到的数据是标红色部分的.sql如下: select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b. ...
- MVC 后台DataTable 前台遍历
/// <summary> /// 多级审批流展示 /// </summary> /// <returns></returns> public Acti ...
- OneNote Count
用OneNote的时候,某个分区的笔记多的话,想数一下一共有多少笔记是个麻烦的活儿. OneNote没有自带这功能 于是写了个C#的小程序实现这功能 https://github.com/02xiao ...
- 在PHP中处理表单之—Checkbox
原文翻译自:http://www.html-form-guide.com/php-form/php-form-checkbox.html 单个checkbox 形如: <form action ...
- Mininet 搭建自定义网络
Mininet支持参数化拓扑,用几行python代码,你就可以创建一个基于你传进去的参数配置的灵活拓扑结构,还可被多个实验重复使用. 下面是一个小例子:(基于mininet/topo.py:Singl ...
- Play Apple(博弈)
Problem 1604 - Play Apple Time Limit: 1000MS Memory Limit: 65536KB Total Submit: 434 Accepted: ...
- Android UI 使用HTML布局(直接打开server网页)
非常多时候我们用HTML布局会更方便直接,记录一下. 我如今主要是直接调用server的网页(实际上是jsp的,仅仅是返回的是html).所以须要联网,第一步加入权限. <uses-permis ...
- poj 3026 (最小生成树)
题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...
- 解决Win7&Win8 64位下Source Insight提示未完整安装的问题
网上的破解版的注册表文件都是针对32位系统的,所以在64位系统里运行根本无法破解.下面分别贴出这俩系统里的破解文件. 使用方法: 分别复制对应系统的内容,新建文本文档,将内容粘贴进去,重命名为.reg ...