• 杂文Python


     

    2.文件操作

    • 文件操作的过程:打开文件获得句柄——>操作文件行(遍历等)——>关闭文件

    • 打开文件获得句柄

          比较low的方法: f = open("file_path","r","encoding=utf-8") 操作完后要关闭文件 f.close

          高大上的方法:用完自动关闭

                 with  open("file_path", "r" , "encoding=utf-8") as f1,

                    open("file_path", "r" , "encoding=utf-8") as f2 :  

           打开方式参数说明:

                r : 只能读,一行一行的读

                w:只能写,按顺序写,这个参数会创建一个新文件。切记 

                a:追加,打开一个文件然后,只能从最后面开始写

                r+:这个读就是跟r一样,写就是跟a一样。前提是你不移动光标

                w+:这个要创建空白文件或覆盖一个同名旧文件。不移动光标读不出任何数据,但是移动光标是闲的蛋疼才去干的事

                a+:追加读。无论怎样移动光标,只能追加,但是不移动光标读不出来数据,也是个蛋疼的设计

                rb:以二进制格式去读文件,读bytes类型的二进制,或者视频等文件,如果你想看010100101100可以这么干

                wb:二进制写,写010110011010进去,传输bytes应该用得到

                rU: 变成 打开,Windows写的可以拿到Linux里面运行了,不过,请问谁会用Windows的记事本去写脚本?除非他觉得自己时间没地方花。

    • 操作文件

          读一下光标移动一下, 写一下光标移动一下,想象一下往记事本里写东西的感觉

         操作光标:f.tell() 当前光标所在的字符位置(按字符个数)。  f.seek(0) 光标回到起点  , f.seek(10)  光标移到第10个字符。

              我感觉我不太会去使用它,复杂的情况下,天知道你的光标会移动到哪里去了。。

         读  : f.readline() 读一行,注意是光标所在位置的那一行,第一行光标移动一行

            f.readlines() 把整个文件所有字符读进一个列表中,这个。。有可能把内存花光

             f.read()  把整个文件所有字符读进一个字符串中,这个。。有可能把内存花光

            f.read(5)  读从光标开始的5个字符,不过谁会去用它呢?

         写 : f.write(“balabalabalabala”) 写字符串,按顺序写  

    遍历: 1.  高大上,速度快的方法:                      

    count = 0                                

    for  line   in  f:  f是文件句柄,迭代器                          

       print(line)

       count += 1

    遍历2.  把内存撑爆的方法:自己搞着玩可以

    for  index,line  in   enumerate(f.readlines()):

        print (index, line)

        其他的一些蛋疼的方法:

    f.encoding 该文件的编码 f.fileno()该文件句柄编号,操作系统维护 f.isatty是不是终端设备文件
    f.name  文件名字 f.seekable能不能移动指针 f.readable  可读?
    f.writable  可写? f.closed 是否关闭 f.flush() 缓存满了刷新进硬盘,同步要求高可用
    f.truncate()  干嘛用?需要查一下 f.truncate(10)  截断10个  a模式下  
    • 打印进度条

    import  sys , time

    for  i  in  range(20):

      sys.stdout.write(">")   标准输出.控制台

      sys.stdout.flush()

      time.sleep(0.1)

     

    4.函数

     定义 

    定义的时候可以有*args   **kwargs放在最后

    def  fuc1(x):

      x += 1

      return x

    传值:

    关键字参数,位置参数,默认参数,参数组

    关键字参数只能放位置参数后面,不知道搞个关键字参数有什么用?谁去用啊?对我来说我直接忽略

    默认参数,可以指定,可以不指定,

    tuple1 = (1,2,3,4,5,4)      # 内部按元祖处理 传参:*tuple1
    list1 = [1,2,2,3,4,5] # 内部按元祖处理 传参:*list1
    set1 = {1,2,3,4,5,6} # 内部按元祖处理 传参:*set1
    dict1 = {"name":"alex","age":22} # 按字典处理 传参:**dict1

    5.局部变量全局变量 | 递归 | 高阶函数

    局部变量

    局部变量: 函数中的形参,{}内的 ,for循环的i等  全局变量就不说了

    可以在局部环境中修改全局变量。。。知道就行了。估计我在代码生涯中不会干这种事

     递归:看个实例就好了,主要看一看语法,实际跟普通函数的定义是一样的

    def  calc(n):

      if n != 0:

        print(n)

        return calc(int(n/2))

     高阶函数:如果函数的参数也为函数,那它就是高阶函数

    abs为求绝对值的函数

    def  add( a, b, f):

      return  f(a) + f(b)

    res = add(3, -6, abs)    输出结果res=9

  • 相关阅读:
    19.递归法和非递归法反转链表[ReverseLinkedList]
    18.用两个栈实现队列[2StacksToImplementQueue]
    17.把字符串转换成整数[atoi]
    16.O(logn)求Fibonacci数列[Fibonacci]
    15.含有指针成员的类的拷贝[ClassCopyConstructorWithPointerMember]
    14.约瑟夫环问题[JosephusProblem]
    13.第一个只出现一次的字符[FindFirstNotRepeatingChar]
    12.从上往下遍历二元树[LevelOrderOfBinaryTree]
    洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm
    洛谷 P2733 家的范围 Home on the Range
  • 原文地址:https://www.cnblogs.com/revo/p/8039678.html
Copyright © 2020-2023  润新知