前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三、文件的操作、函数、类和对象

三、文件的操作、函数、类和对象

作者头像
酱紫安
发布2018-04-16 15:53:57
1.3K0
发布2018-04-16 15:53:57
举报

一、文件

文件的打开与关闭

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件

open(文件名,访问模式)

示例如下:

  f = open('test.txt', 'w')

说明:

访问模式

说明

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a+

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

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab+

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

<2>关闭文件

close( )

示例如下:

 # 新建一个文件,文件名为:test.txt
    f = open('test.txt', 'w')

    # 关闭这个文件
    f.close()

文件的读写

<1>写数据(write)

使用write()可以完成向文件写入数据

demo:


f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()

<2>读数据(read)

使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据

demo:

f = open('test.txt', 'r')

content = f.read(5)

print(content)

print("-"*30)

content = f.read()

print(content)

f.close()

注意:

  • 如果open是打开一个文件,那么可以不用谢打开的模式,即只写 open('test.txt')
  • 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的

<3>读数据(readlines)

就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

#coding=utf-8

f = open('test.txt', 'r')

content = f.readlines()

print(type(content))

i=1
for temp in content:
    print("%d:%s"%(i, temp))
    i+=1

f.close()

<4>读数据(readline)

一行一行读

#coding=utf-8

f = open('test.txt', 'r')

content = f.readline()
print("1:%s"%content)

content = f.readline()
print("2:%s"%content)

f.close()

文件的随机读

<1>获取当前读写的位置

在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取

 # 打开一个已经存在的文件
    f = open("test.txt", "r")
    str = f.read(3)
    print( "读取的数据是 : ", str)

    # 查找当前位置
    position = f.tell()
    print "当前文件位置 : ", position

    str = f.read(3)
    print( "读取的数据是 : ", str)

    # 查找当前位置
    position = f.tell()
    print( "当前文件位置 : ", position)

    f.close()

<2>定位到某个位置

如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()

seek(offset, from)有2个参数

  • offset:偏移量
  • from:方向
    • 0:表示文件开头
    • 1:表示当前位置
    • 2:表示文件末尾

demo:把位置设置为:从文件开头,偏移5个字节

# 打开一个已经存在的文件
    f = open("test.txt", "r")
    str = f.read(30)
    print( "读取的数据是 : ", str)

    # 查找当前位置
    position = f.tell()
    print ("当前文件位置 : ", position)

    # 重新设置位置
    f.seek(5,0)

    # 查找当前位置
    position = f.tell()
    print( "当前文件位置 : ", position)

    f.close()

demo:把位置设置为:离文件末尾,3字节处

 # 打开一个已经存在的文件
    f = open("test.txt", "r")

    # 查找当前位置
    position = f.tell()
    print ("当前文件位置 : ", position)

    # 重新设置位置
    f.seek(-3,2)

    # 读取到的数据为:文件最后3个字节数据
    str = f.read()
    print ("读取的数据是 : ", str)

    f.close()

文件的重命名、删除

有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这么功能

<1>文件重命名

os模块中的rename()可以完成对文件的重命名操作

rename(需要修改的文件名, 新的文件名)

  import os

    os.rename("毕业论文.txt", "毕业论文-最终版.txt")
<2>删除文件

os模块中的remove()可以完成对文件的删除操作

remove(待删除的文件名)

    import os

    os.remove("毕业论文.txt")

文件夹的相关操作

实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等

就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块

<1>创建文件夹

    import os

    os.mkdir("张三")

<2>获取当前目录

 import os

 os.getcwd()

<3>改变默认目录

import os

os.chdir("../")

<4>获取目录列表

import os

os.listdir("./")

<5>删除文件夹

import os

os.rmdir("张三")

函数

函数定义和调用

<1>定义函数

定义函数的格式如下:

  def 函数名():
        代码

demo:

   # 定义一个函数,能够完成打印信息的功能
    def printInfo():
        print( '------------------------------------')
        print ('         人生苦短,我用Python')
        print( '------------------------------------')

<2>调用函数

定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它

调用函数很简单的,通过 函数名() 即可完成调用

demo:

    # 定义完函数后,函数是不会自动执行的,需要调用它才可以
    print (Info())

4种函数的类型

函数根据有没有参数,有没有返回值,可以相互组合,一共有4种

  • 无参数,无返回值
  • 无参数,有返回值
  • 有参数,无返回值
  • 有参数,有返回值

<1>无参数,无返回值的函数

此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数

  def printMenu():
        print('--------------------------')
        print('      xx涮涮锅 点菜系统')
        print('')
        print('  1.  羊肉涮涮锅')
        print('  2.  牛肉涮涮锅')
        print('  3.  猪肉涮涮锅')
        print('--------------------------')

<2>无参数,有返回值的函数

此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数

  # 获取温度
    def getTemperature():

        #这里是获取温度的一些处理过程

        #为了简单起见,先模拟返回一个数据
        return 24

    temperature = getTemperature()
    print('当前的温度为:%d'%temperature)

<3>有参数,无返回值的函数

此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数

<4>有参数,有返回值的函数

此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数

    # 计算1~num的累积和
    def calculateNum(num):

        result = 0
        i = 1
        while i<=num:

            result = result + i

            i+=1

        return result

    result = calculateNum(100)
    print('1~100的累积和为:%d'%result)

函数的嵌套调用

  • 一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用 
  • 如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置

局部变量

  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用

全局变量

  • 在函数外边定义的变量叫做全局变量
  • 全局变量能够在所有的如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。函数中进行访问
  • 如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
  • 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的。
  • 对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
  • 对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量

递归函数

如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

如下实例:

 sum = lambda arg1, arg2: arg1 + arg2

    #调用sum函数
    print "Value of total : ", sum( 10, 20 )
    print "Value of total : ", sum( 20, 20 )

以上实例输出结果:

    Value of total :  30
    Value of total :  40

定义类

定义一个类,格式如下:

class 类名:
    方法列表

demo:定义一个Car类

# 定义类
class Car:
    # 方法
    def getCarInfo(self):
        print('车轮子个数:%d, 颜色%s'%(self.wheelNum, self.color))

    def move(self):
        print("车正在移动...")
  • 定义类时有2种:新式类和经典类,上面的Car为经典类,如果是Car(object)则为新式类
  • 类名 的命名规则按照"大驼峰"

创建对象

创建对象的格式为:

对象名 = 类名()

__init__()方法

使用方式

def 类名:
    #初始化函数,用来完成一些默认的设定
    def __init__():
        pass
  • __init__()方法,在创建一个对象时默认被调用,不需要手动调用
  • __init__(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)
  • __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去

__str__()方法

class Car:

    def __init__(self, newWheelNum, newColor):
        self.wheelNum = newWheelNum
        self.color = newColor

    def __str__(self):
        msg = "嘿。。。我的颜色是" + self.color + "我有" + int(self.wheelNum) + "个轮胎..."
        return msg

    def move(self):
        print('车在跑,目标:夏威夷')


BMW = Car(4, "白色")
print(BMW)
  • 在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
  • 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

self

  • 所谓的self,可以理解为自己
  • 可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思
  • 某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可

一个飞机大战的雏形(用到了pygame,挺好学的,学累了可以用它弄点自己简单的小游戏。练练Python的基本语法)

  1 #coding=utf-8
  2 import time
  3 import random
  4 import pygame
  5 from pygame.locals import *
  6 
  7 
  8 class HeroPlane(object):
  9 
 10     def __init__(self,screen):
 11 
 12         #设置飞机默认的位置
 13         self.x = 230
 14         self.y = 600
 15 
 16         #设置要显示内容的窗口
 17         self.screen = screen
 18 
 19         self.imageName = "./feiji/hero.gif"
 20         self.image = pygame.image.load(self.imageName).convert()
 21 
 22         #用来存储英雄飞机发射的所有子弹
 23         self.bulletList = []
 24 
 25     def display(self):
 26         #更新飞机的位置
 27         self.screen.blit(self.image,(self.x,self.y))
 28 
 29         #判断一下子弹的位置是否越界,如果是,那么就要删除这颗子弹
 30         #
 31         #这种方法会漏掉很多需要删除的数据
 32         # for i in self.bulletList:
 33         #     if i.y<0:
 34         #         self.bulletList.remove(i)
 35 
 36         #存放需要删除的对象信息
 37         needDelItemList = []
 38 
 39         for i in self.bulletList:
 40             if i.judge():
 41                 needDelItemList.append(i)
 42 
 43         for i in needDelItemList:
 44             self.bulletList.remove(i)
 45 
 46         # del needDelItemList
 47 
 48         #更新及这架飞机发射出的所有子弹的位置
 49         for bullet in self.bulletList:
 50             bullet.display()
 51             bullet.move()
 52 
 53         #修改所有子弹的位置
 54         # for bullet in self.bulletList:
 55         #     bullet.y -= 2
 56 
 57     def moveLeft(self):
 58         self.x -= 10
 59 
 60     def moveRight(self):
 61         self.x += 10
 62 
 63     def sheBullet(self):
 64         newBullet = Bullet(self.x,self.y,self.screen)
 65         self.bulletList.append(newBullet)
 66 
 67 class Bullet(object):
 68     def __init__(self,x,y,screen):
 69         self.x = x+40
 70         self.y = y-20
 71         self.screen = screen
 72         self.image = pygame.image.load("./feiji/bullet-3.gif").convert()
 73 
 74     def move(self):
 75         self.y -= 2
 76 
 77     def display(self):
 78         self.screen.blit(self.image,(self.x,self.y))
 79 
 80     def judge(self):
 81         if self.y<0:
 82             return True
 83         else:
 84             return False
 85 
 86 class EnemyPlane(object):
 87 
 88     def __init__(self,screen):
 89 
 90         #设置飞机默认的位置
 91         self.x = 0
 92         self.y = 0
 93 
 94         #设置要显示内容的窗口
 95         self.screen = screen
 96 
 97         self.imageName = "./feiji/enemy-1.gif"
 98         self.image = pygame.image.load(self.imageName).convert()
 99 
100         #用来存储敌人飞机发射的所有子弹
101         self.bulletList = []
102 
103         self.direction = "right"
104 
105     def display(self):
106         #更新飞机的位置
107         self.screen.blit(self.image,(self.x,self.y))
108 
109         #判断一下子弹的位置是否越界,如果是,那么就要删除这颗子弹
110         #
111         #这种方法会漏掉很多需要删除的数据
112         # for i in self.bulletList:
113         #     if i.y<0:
114         #         self.bulletList.remove(i)
115 
116         #存放需要删除的对象信息
117         needDelItemList = []
118 
119         for i in self.bulletList:
120             if i.judge():
121                 needDelItemList.append(i)
122         for i in needDelItemList:
123             self.bulletList.remove(i)
124 
125         # del needDelItemList
126 
127         #更新及这架飞机发射出的所有子弹的位置
128         for bullet in self.bulletList:
129             bullet.display()
130             bullet.move()
131 
132 
133     def move(self):
134 
135         #如果碰到了右边的边界,那么就往左走,如果碰到了左边的边界,那么就往右走
136         if self.direction == "right":
137             self.x += 2
138         elif self.direction == "left":
139             self.x -= 2
140 
141         if self.x>480-50:
142             self.direction = "left"
143         elif self.x<0:
144             self.direction = "right"
145 
146     def sheBullet(self):
147         num = random.randint(1,100)
148         if num == 88:
149             newBullet = EnemyBullet(self.x,self.y,self.screen)
150             self.bulletList.append(newBullet)
151 
152 class EnemyBullet(object):
153     def __init__(self,x,y,screen):
154         self.x = x+30
155         self.y = y+30
156         self.screen = screen
157         self.image = pygame.image.load("./feiji/bullet-1.gif").convert()
158 
159     def move(self):
160         self.y += 2
161 
162     def display(self):
163         self.screen.blit(self.image,(self.x,self.y))
164 
165     def judge(self):
166         if self.y>890:
167             return True
168         else:
169             return False
170 
171 
172 if __name__ == "__main__":
173 
174     #1. 创建一个窗口,用来显示内容
175     screen = pygame.display.set_mode((480,890),0,32)
176 
177     #2. 创建一个和窗口大小的图片,用来充当背景
178     background = pygame.image.load("./feiji/background.png").convert()
179 
180     #3. 创建一个飞机对象
181     heroPlane = HeroPlane(screen)
182 
183     #4. 创建一个敌人飞机
184     enemyPlane = EnemyPlane(screen)
185 
186     #3. 把背景图片放到窗口中显示
187     while True:
188         screen.blit(background,(0,0))
189 
190         heroPlane.display()
191 
192         enemyPlane.move()
193         enemyPlane.sheBullet()
194         enemyPlane.display()
195 
196         #判断是否是点击了退出按钮
197         for event in pygame.event.get():
198             # print(event.type)
199             if event.type == QUIT:
200                 print("exit")
201                 exit()
202             elif event.type == KEYDOWN:
203                 if event.key == K_a or event.key == K_LEFT:
204                     print('left')
205                     heroPlane.moveLeft()
206                     #控制飞机让其向左移动
207                 elif event.key == K_d or event.key == K_RIGHT:
208                     print('right')
209                     heroPlane.moveRight()
210                 elif event.key == K_SPACE:
211                     print("space")
212                     heroPlane.sheBullet()
213 
214         #通过延时的方式,来降低这个while循环的循环速度,从而降低了cpu占用率
215         time.sleep(0.01)
216 
217         pygame.display.update()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、文件
    • 文件的打开与关闭
      • <2>关闭文件
        • 文件的读写
          • <1>写数据(write)
            • <2>读数据(read)
              • <3>读数据(readlines)
                • <4>读数据(readline)
                  • 文件的随机读
                    • <1>获取当前读写的位置
                      • <2>定位到某个位置
                        • 文件的重命名、删除
                          • <1>文件重命名
                            • 文件夹的相关操作
                              • <1>创建文件夹
                                • <2>获取当前目录
                                  • <3>改变默认目录
                                    • <4>获取目录列表
                                      • <5>删除文件夹
                                      • 函数
                                        • 函数定义和调用
                                          • <1>定义函数
                                            • <2>调用函数
                                              • 4种函数的类型
                                                • <1>无参数,无返回值的函数
                                                  • <2>无参数,有返回值的函数
                                                    • <3>有参数,无返回值的函数
                                                      • <4>有参数,有返回值的函数
                                                        • 函数的嵌套调用
                                                          • 局部变量
                                                            • 全局变量
                                                              • 递归函数
                                                                • 匿名函数
                                                                • 定义类
                                                                  • 创建对象
                                                                    • __init__()方法
                                                                      • __str__()方法
                                                                        • self
                                                                        相关产品与服务
                                                                        对象存储
                                                                        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                                                                        领券
                                                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档