zoukankan      html  css  js  c++  java
  • Python基础(二)

    Python基础(二)

    文件操作

    读操作

    f = open('one','r',encoding='utf-8')
    data=f.read()     ##默认读取所有,可以指定读取多少个字节
    print(data)
    f.close()
    
    r+          #写是追加
    

    写操作

    f = open('two','w',encoding='utf-8')
    f.write('one\n')  ##不存在则会创建一个新文件,存在则覆盖
    f.close()
    注:写入多行内容,会等到最后一次性全部写入,而不是一行写入一次。
    
    w+          #写是追加
    
    

    追加

    f = open('two','a',encoding='utf-8')
    f.write('three\n')
    f.close()
    

    修改

    with open('file','r',encoding='utf-8') as f:
        line=f.readlines()
    with open('file','w',encoding='utf-8') as f1:
        for i in line:
            if 'zyl' in i:
                i=i.replace('zyl','wq')
            f1.write(i)
    
    注:一个文件同时只能以打开一次,如果打开多次最后一次打开模式会替换之前的模式。
    

    方法

    f = open('one',encoding='utf-8')
    打印一行
    f.readline()
    
    打印所有行,以列表形式展现
    f.readlines()
    
    打印文件光标位置
    f.tell()
    
    移动文件光标位置,根据字节来移动
    seek(offset [,from])  
    ##在utf-8中一个汉字占3个字节,所以文件如果是中文移动必须是3的倍数。offset,移动几位。from,从什么位置开始移动。  
    如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置,只有在二进制(rb,wb,ab)模式下才可以使用。
    
    打印文件编码
    f.encoding
    
    打印文件名称
    f.name
    
    实时的写入文件
    f.flush()
    
    截断内容,仅在‘a’模式下使用,只能从开头截断,无法使用seek跳转到具体位置
    f.truncate(10)
    
    内存中可以添加数据,而硬盘中不能添加,添加会将原有位置上的数据覆盖掉。
    

    with语句

    字符编码

    unicode所有字符都占两个字节
    ASCLL码所有字符都占一个字节
    UTF-8,英文字符都占一个字节,中文字符都占三个字节
    encode(编码):按照某种规则将“文本”转换为“字节流”。 python3中表示:unicode变成bytes
    decode(解码):将“字节流”按照某种规则转换成“文本”。python3中表示:bytes变成unicode,也可以变为其它类型

    函数

    面向过程编程和面向函数编程
    面向过程编程其实就是没有return的函数

    定义一个函数
    你可以定义一个由自己想要功能的函数,以下是简单的规则:

    • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
    • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    语法
    Python 定义函数使用 def 关键字,一般格式如下:

    def 函数名(参数列表):
        函数体
    

    优点

    • 代码重用
    • 保持一致性
    • 可扩展性

    函数返回值

    • 返回值数=0:返回None
    • 返回值数=1:返回object
    • 返回值数>1: 返回tuple

    函数传参
    形参与实参需要一一对应,不能多或者少

    关键字传参
    注:关键字参数必须放在位置参数后面

    默认参数
    特点:调用函数时,默认参数非必须传递

    *args和**kwargs

    • *args:把N个参数,转换为元组
    • **kwargs: 把N个关键字参数,转换为字典
    • *args和**kwargs必须放到最后

    变量作用域

    • global: 函数内修改全局变量。
    • 集合,列表,字典,类都可以在函数内修改,只有字符串不可以。
    • 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    • 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    • 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

    递归
    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
    示例:

    def zyl(n):
        print(n)
        if int(n/2) ==0:
            return n
        return zyl(int(n/2))
    
    zyl(10)
    
    输出:
    10
    5
    2
    1
    

    特性:

    • 必须有一个明确的结束条件
    • 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    高阶函数
    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    def add(x,y,f):
        return f(x) + f(y)
    res = add(3,-6,abs)
    print(res)
    注:abs函数是获取数字的绝对值
    

    打印当前行的下一行

    f = open('one','r')
    b=False
    count=1
    for i in f:
        if count ==2:
            b=True
        elif b:
            print(i)
            b=False
        count+=1
    

    打印当前行的后几行

    f = open('one','r')
    b=False
    count=5
    for i in f:
        if i.find('111') >=0:
            b=True
        elif b and count:
            print(i.strip())
            count-=1
    

    每日练习
    程序1: 实现简单的shell sed替换功能
    代码如下:

    import os,sys
    
    if len(sys.argv[1:]) != 3:
        print('输入的参数数量不正确')
        sys.exit()
    
    source=sys.argv[1]
    target=sys.argv[2]
    if os.path.isfile(sys.argv[3]):
        file = sys.argv[3]
    else:
        print('文件不存在')
        sys.exit()
    
    def openfile():
        with open(file,'r') as f:
            content=f.readlines()
        return content
    
    def writefile():
        lines=openfile()
        with open(file,'w') as f:
            for line in lines:
                if source in line:
                    line=line.replace(source,target)
                f.write(line)
    
    writefile()
    

    程序2:修改haproxy配置文件
    需求:

    1、查
        输入:www.oldboy.org
        获取当前backend下的所有记录
    2、新建
        输入:{'bakend': 'www.oldboy.org','record':{'server': '100.1.7.9','weight': 20,'maxconn': 30}}
    3、删除
        输入:www.oldboy.org
        删除当前backend下的所有记录
    

    代码如下:

    
    options=['search','add','delete']
    def openfile():
        with open('file1','r') as f:
            content=f.readlines()
        return content
    
    def displayoptions():
        for index,opt in  enumerate(options,start=1):
            print(index,opt,sep=' ')
    
    def search(keyword):
        lines=openfile()
        count=2
        b=False
        for line in lines:
            if line.startswith('backend') and line.find(keyword) >=0:
                b=True
            elif b and count:
                print(line.strip())
                count-=1
    def add(arg):
        with open('file1','a') as f:
            f.write('\nbakend  %s' % arg['bakend'])
            f.write('\n\t server {} weight {} maxconn {}'.format(arg['record']['server'],arg['record']['weight'],arg['record']['maxconn']))
    
    def delete(keyword):
        lines = openfile()
        count=2
        b=False
        with open('file1','w') as f:
            for line in lines:
                if keyword in line:
                    b=True
                    continue
                elif b and count:
                    count-=1
                    continue
                f.write(line)
    def man():
        while True:
            displayoptions()
            choice=input('请输入你的操作: ')
            if choice.isdigit():
                choice=int(choice)
                if choice <= 3 and choice >= 1:
                    if choice == 1:
                        keyword=input('请输入关键字: ')
                        eval(options[choice-1])(keyword)
                    elif choice == 2:
                        keyword=input('请以字典格式写入内容: ')
                        if not isinstance(eval(keyword),dict):
                            print('数据格式不正确,请重新输入',type(eval(keyword)))
                            continue
                        eval(options[choice-1])(eval(keyword))
                    else:
                        keyword = input('请输入关键字: ')
                        eval(options[choice - 1])(keyword)
                else:
                    print('输入的数字不在有效范围内')
            else:
                print('输入非数字')
    
    if __name__ == '__main__':
        man()
    
    
    
  • 相关阅读:
    ASP.NET MVC学习笔记-----ActionInvoker
    quartz启动报错
    THUSC 2021 游记
    C++下随机数的生成
    友链
    memset一些技巧
    CodeForces Round #705 总结&题解
    php计算两坐标距离
    vue中使用keepAlive组件缓存遇到的坑
    vue 中 keepAlive
  • 原文地址:https://www.cnblogs.com/SleepDragon/p/10372808.html
Copyright © 2011-2022 走看看