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+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

(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+打开文件把列表中的内容写入进去即可

 1 foo = open(‘text‘,‘r‘) 2 aa = foo.readlines() 3 ccc = [] 4 for i in aa: 5     if i == ‘ccc\n‘: 6         continue 7     else: 8         ccc.append(i) 9 foo.close()10 11 foe= open(‘text‘,‘w+‘)12 for iss in ccc:13     foe.write(iss)14 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啊现在怎么是两个呢,其实呢是因为你妹的还有个换行符占了个位置

1 foo = open(‘text‘,‘r+‘)2 aa = foo.read(6)3 print(aa)4 aaa 
5 bb

文件定位-打开文件

② 查找当前位置tell()

foo = open(‘text‘,‘r+‘)
aa = foo.read(3)
ss = foo.tell()
print(aa,ss)

③把指针再次重新定位到文件开头

1 foo = open(‘text‘,‘r+‘)2 aa = foo.read(3)3 print(foo.tell())4 print(aa)5 foo.seek(0, 0)6 print(foo.tell())7 3 
8 aaa 
9 0

重新定位指针

时间: 2024-10-06 23:07:53

python成长之路第一篇(5)文件的基本操作的相关文章

Python成长之路第一篇(1)__字符串初识

在很多编程的书中都会以print  "Hello,world!"这样的而一个程序为开始,那么hello,world是什么呢?这就是本章讲解的字符串(也即是一串字符) 一.单引号,双引号和转义引号 (1)在一般的时候 'Hello,world!'和"Hello,world!"是没有什么区别的,那么为什么会两个都可以用呢?是因为在某些情况下,他们会排上用处 1 >>> "Hellow,world" 2 'Hellow,world' 

Python成长之路 第一篇 《Python基础》

1.python文件命名 - 后缀名可以是任意的,但为规范便于识别,后缀名应为 .py 2.两种执行方式    python解释器   py文件路径     python   进入解释器: 实时输入并获取到执行结果 3.解释器路径 在Linux系统中应添加  #!/user/bin/env python    , windows系统中可不添加 4.编码 # -*- coding:utf8 -*-  (在python3中可不加,python只要出现中文头部必须加) ascill  只能编译英文 u

Python成长之路第一篇(4)_if,for,while条件语句

有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连接,但是这样做是不好的 因为在使用加号的时候,会在内存中开辟新的内存地址来存放新的内容这样做的坏处就是增加了内存的消耗 那么我们该怎么办呢? (1)字符串格式化 ①内置占位符 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符

Python成长之路第一篇(2)-初识列表和元组

可以将列表和元组当成普通的"数组",他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括,元素的个数和值可以改变,而元组用({})包括,不能更改.元组可以看成是只读的列表 一.初识列表 1.下面是一个正常的列表 >>> lis = ['xiaoyuan',25] 在序列中,可以包含其他的序列,也就是列表可以包含列表元组等 >>> lis =

我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)

2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算是有一点基础.但在这里我要保持空杯心态,一切从头开始.好了不多说,Let's Python!!!! 一.Python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.目前Python已经成为实际上除了中国最流行的开发语

Python成长之路第二篇(1)_数据类型内置函数用法

数据类型内置函数用法int 关于内置方法是非常的多这里呢做了一下总结 (1)__abs__(...)返回x的绝对值 #返回x的绝对值!!!都是双下划线 x.__abs__() <==> abs(x) 例如: #!/usr/bin/python print "abs(-45) : ", abs(-45) print "abs(100.12) : ", abs(100.12) print "abs(119L) : ", abs(119L)

我的Python成长之路---第一天---Python基础(2)---2015年12月26日(雾霾)

三.数据类型 Python基本类型(能够直接处理的数据类型有以下几种)主要有5种 1.整数(int) Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 2.浮点数(float) 浮点数也就是数学中的小数.由于整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍五入的误差.需要注意. 3.字符串 字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xy

我的Python成长之路---第一天---Python基础(6)---2015年12月26日(雾霾)

七.列表——list Python的列表是一种内置的数据类型,是由Python的基本数据类型组成的有序的集合.有点类似C语言的数组,但与数组不同的是,Python在定义列表的时候不用指定列表的容积(长度),可根据需要任意扩展,另外列表的内的元素可以是不同的数据类型,当然既然是任何数据类型,当然也包括另一个列表也就是嵌套.Python中列表使用中括号[]括起来,例如[1,2,True,'ABC',[5,'678']]. 1.列表的切片 通字符串一样列表也支持切片操作,例如我们有一个列表A_list

Python人工智能之路 - 第一篇 : 你得会点儿Python基础

Python 号称是最接近人工智能的语言,因为它的动态便捷性和灵活的三方扩展,成就了它在人工智能领域的丰碑 走进Python,靠近人工智能 一.编程语言Python的基础 之 "浅入浅出"不是不给你讲,而是重点在人工智能应用 1.变量 声明变量: 1 name = "DragonFire" # 声明一个变量name 用来存储一个字符串"DragonFire" 2 age = 20 # 声明一个变量age 用来存储一个数字 20 3 4 print