文件对象
不同的类型会产生不同类型的对象(整数、字符串、字典、元组、布尔、range)
文件的读写通过文件操作对象进行(python2 File,python3 TextIOWrapper)
文件的打开:file_object = open(file_name,access_mode = 'r'),file_name文件路径,,access_mode(读,写,读+写),open内置函数最后要调用close()关闭,close文件后就不能再用读函数
相对路径:当前路径——在cmd、shell打开,就是shell当前所在的目录,路径中若用反斜杠需加r,如r‘\\’,正斜杠不需要加r
文件指针:tell方法来获取指针的位置
只读打开方式:r,文件指针在文件的开头,也是缺省的文件打开方式
read 读取指定长度byte串,read读取的是内容,不加参数表示读取全部
seek 参数0:从头开始
参数1:当前位置
参数2:从尾开始,python 3 里面,后两种定位方式,打开文件时一定要以二进制的方式打开,比如open(‘abc’ 'br')
回车+加换行要多两个位置
readline 读取一行
readlines 读取所有行
写打开方式:如果文件已经存在,其内容将被清空。如果文件不存在,则创建一个文件
a 追加打方式 为了在文件末尾追加内容而打开文件;如果文件存在,文件指针在文件的结尾;如果文件不存在,则创建一个文件
r+ 为了读取并且写文件而打开文件。如果文件不存在,会报错。文件指针在文件的开头
w+ 为了读取并且写文件而打开文件。如果文件不存在,会创建一个文件。文件指针在文件的开头。如果文件已经存在,其内容将被清空。
a+ 为了读取并且写文件而打开文件。如果文件不存在,会创建一个文件。文件指针在文件的结尾。很多OS上写操作永远在文件结尾进行,不管是否用了seek
python3 里的string 都是Unicode类型
文件的另外一种打开方式 with open
with open ('tmp3','r') as f:
fc = f.read()
执行结束时,系统自动调用f.close()
支持多个文件的打开
with open(inFileName) as ifile,open(outFileName,'w') as ofile:
fc = ifile.read()
ofile.write(fc)
循环嵌套+算法
循环嵌套
boys = ['minke','jack','tom']
girls = ['lisa','lidna','mary']
for boy in boys:
for girl in girls:
print ('%s sharks %s' % (boy,girl))
列表生成式
下面是员工的税前工资列表
[10000,15000,8000,4000,5000]
每个员工扣税10%
请计算出所有员工的税后工资,存储在列表中
beforetax = [10000,15000,8000,4000,5000]
aftertax = [ ]
for one in beforetax:
aftertax.append(one*0.9)
典型的从源列表生成目标列表的处理场景
从源列表里面依次取出元素
做同样的处理
放入另一个列表中
beforetax = [10000,15000,8000,4000,5000]
aftertax = [one*0.9 for one in beforetax]
aftertax = [int(one*0.9) for one in beforetax]
加上过滤条件
beforetax = [10000,15000,8000,4000,5000]
aftertax = [one*0.9 for one in before if one >= 10000] 先执行if,再乘以0.9
算法
有些处理过程需要逻辑思维能力
比如,将给定列表中的元素,从大到小排列
自己实现,不要用sort()
[3,5,7,2,56,34,54,23,21,56,33,2,......]
冒泡排序 没有产生新的列表
[3,5,7,2,56,34,54,23,21,56,33,2]假设总共n个元素
第1轮:
对所有的n个元素(从a[0]到a[n-1]),比较流程:
依次比较,相邻的两个元素,大的移到后面
先a[0]和a[1]比,如果a[0] > a[1],交换位置
然后a[1]和a[2]比,如果a[1] > a[2],交换位置
。。。
这样,最后最大的元素就到了a[n-1]
第2轮:
除了最后一个元素,剩余的n-1个元素(a[0]到a[n-2])里面
比较流程:
。。。。
这样,最后第二大的元素就到了a[n-2]
依次类推,直到第n-1轮
再实现算法
alist = [3,5,7,2,56,34,54,23,21,56,33,2,4,6]
def bubble(alist):
# j 代表元素的下标,从最后一个元素到第二个元素
for j in range(len(alist) -1 , 0, -1):
#第一轮的比较 是所有元素的比较,第二轮是n-1 个元素
for i in range(0,j):
if alist[i] > alist[i+1]:
alist[i],alist[i+1] = alist[i+1],alist[i] 两个元素位置交换
return alist
两个元素位置交换的另一种写法
tmp = alist[i]
alist[i] = alist[i+1]
alist[i +1] = tmp
另外一种排序
[3,5,7,2,56,34,54,23,21,56,33,2]
创建一个新的列表newlist
先找出所有元素中最小的,append在newlist里面
再找出剩余的所有元素中最小的,append在newlist 里面
依次类推,直到所有的元素都放到newlist里面
知识点补充
判断条件简写
if判断条件还可以简写
x = 9
if x:
print ('x is not zero')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False
pass关键字
pass 关键字,定义一个空语句
def meth_a(self):
pass
def meth_b(self):
print('hello,world')
函数里面调用函数
我们可以在函数里面调用其他函数
def foo():
print ('in foo()')
bar()
foo()
这样定义,解释器并不会报错
执行foo(),就会报错 bar没有定义
def bar():
print ('in bar()')
def foo():
print ('in foo()')
bar()
foo()
def foo():
print ('in foo()')
bar()
def bar():
print ('in bar()')
foo() 这样的位置也不会报错,执行的过程中有函数的定义
文件打开
fileDir = 'G:/pyTest1.txt'
fileDir2= 'G:\pyTest1.txt'
fileDir3 =r 'G:pyTest1.txt' r 取消转义
中文读取加上参数 encoding = 'utf-8'
./ 当前路径
../上层目录
文件读取
seek(偏移量,模式)
0模式:永远从文件指针开始的地方计算,对应是r
1模式:当前位置
2模式:文件末尾
seek1模式和2模式支持rb的读取方式