• 文件读写+循环嵌套与算法-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的读取方式
     
  • 相关阅读:
    maven学习(七)——使用maven构建java项目
    Java 实现word 中写入文字图片的解决方案
    postman中如何传数组
    char类型在传参时接收不到数据的原因
    Oracle一条数据多表连插
    Spring Cloud Config的配置中心使用非对称性加密
    Failed to read artifact descriptor for org.springframework.cloud:spring-cloud-starter-config:jar:unk
    如何上传文件到git
    Windows的DOS命令
    ideal的maven项目不小心remove module,如何找回
  • 原文地址:https://www.cnblogs.com/hyzhang/p/7615201.html
Copyright © 2020-2023  润新知