文件读写+循环嵌套与算法-7

文件对象

不同的类型会产生不同类型的对象(整数、字符串、字典、元组、布尔、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的读取方式
 
posted @ 2017-10-10 20:03  午间小憩  阅读(282)  评论(0编辑  收藏  举报