在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件名,访问模式)
示例如下:
f = open('test.txt', 'w')
说明:
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
close( )
示例如下:
# 新建一个文件,文件名为:test.txt
f = open('test.txt', 'w')
# 关闭这个文件
f.close()
使用write()可以完成向文件写入数据
demo:
f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()
使用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('test.txt')
就像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()
一行一行读
#coding=utf-8
f = open('test.txt', 'r')
content = f.readline()
print("1:%s"%content)
content = f.readline()
print("2:%s"%content)
f.close()
在读写文件的过程中,如果想知道当前的位置,可以使用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()
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset, from)有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模块中都有这么功能
os模块中的rename()可以完成对文件的重命名操作
rename(需要修改的文件名, 新的文件名)
import os
os.rename("毕业论文.txt", "毕业论文-最终版.txt")
<2>删除文件
os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)
import os
os.remove("毕业论文.txt")
实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等
就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块
import os
os.mkdir("张三")
import os
os.getcwd()
import os
os.chdir("../")
import os
os.listdir("./")
import os
os.rmdir("张三")
定义函数的格式如下:
def 函数名():
代码
demo:
# 定义一个函数,能够完成打印信息的功能
def printInfo():
print( '------------------------------------')
print (' 人生苦短,我用Python')
print( '------------------------------------')
定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
调用函数很简单的,通过 函数名() 即可完成调用
demo:
# 定义完函数后,函数是不会自动执行的,需要调用它才可以
print (Info())
函数根据有没有参数,有没有返回值,可以相互组合,一共有4种
此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数
def printMenu():
print('--------------------------')
print(' xx涮涮锅 点菜系统')
print('')
print(' 1. 羊肉涮涮锅')
print(' 2. 牛肉涮涮锅')
print(' 3. 猪肉涮涮锅')
print('--------------------------')
此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数
# 获取温度
def getTemperature():
#这里是获取温度的一些处理过程
#为了简单起见,先模拟返回一个数据
return 24
temperature = getTemperature()
print('当前的温度为:%d'%temperature)
此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数
此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数
# 计算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)
全局变量
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("车正在移动...")
创建对象的格式为:
对象名 = 类名()
__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)
__xxxx__()
的,那么就有特殊的功能,因此叫做“魔法”方法__str__(self)
方法,那么就会打印从在这个方法中return的数据一个飞机大战的雏形(用到了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()