• day17 文件处理及简单函数


    Python之路,Day5 = Python基础5

    常亮 用大写来做提示

    chr() # 数字转字符
    ord() # 字符转数字

    读文件

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

    >>> f = open('/Users/michael/test.txt', 'r')

    标示符'r'表示读,这样,我们就成功地打开了一个文件。

    如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:

    >>> f=open('/Users/michael/notfound.txt', 'r')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IOError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
    

    操作内容

    # 打开方式 a w r 
    rb wb ab, 直接以二进制的方式处理
    read()
    readline()
    readlines()
    
    write()
    write(['111
    ', '222
    '])
    
    
    f.seek(3) # 控制光标到三的位置
    f.seek(3,1) # 从当前位置往后3个位置,打开以二进制的方式才行
    f.seek(-1,2) # 从末尾倒着数1个,打开以二进制的方式才行
    f.tell() # 显示当前光标位置
    f.truncate(3) # 截断,只留下前三个字符
    read(size)  # 每次最多读取size个字节的内容
    f.flush() # 写入,刷新
    f.closed # 文件关闭状态
    f.encoding() # 查看文件字符编码
    f.name() # 查看文件名
    
    for line in f:
      print(line)
    # 逐行读取,
    

     最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

    >>> f.close()
    

     但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

    with open('/path/to/file', 'r') as f:
        print f.read()
    

     前面讲的默认都是读取文本文件,并且是ASCII编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可:

    >>> f = open('/Users/michael/test.jpg', 'rb')
    >>> f.read()
    'xffxd8xffxe1x00x18Exifx00x00...' # 十六进制表示的字节
    

    Python 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。


    定义一个函数

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

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

    语法

    def functionname( parameters ):
       "函数_文档字符串"
       function_suite
       return [expression]
    

      

    # 1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作
    def change_info(filename, old, new):
        with open(filename, 'r', encoding='utf-8') as f:
            for line in f:
                if old in line:
                    line = line.replace(old, '33[42;0m%s33[0m'%new)
                print(line, end='')
    change_info('jobs.txt', 'today', 'today')
    

      

    # 2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
    def get_count(str1):
        n, c, s, o = 0,0,0,0
        for i in str1:
            if 47 < ord(i) < 58:
                n += 1
            elif 64 < ord(i) < 91 or 96 < ord(i) < 123:
                c += 1
            elif ord(i) == 32:
                s += 1
            else:
                o += 1
        print('数字有%s个,字母有%s个,空格有%s个,其它有%s个。。。'%(n, c, s, o))
    get_count('as they signed off. Stay Hungry. Stay Foolish. And I have always wished that for myself. And now, as you graduate to begin anew, I wish that for you.')
    isdigit()
    isspace()
    isalpha()       # 是否字母
    # 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    def check_type(obj):
        t = ''    # 判断类型
        m = '没超过'    # 判断是否超过5长度
        if type(obj) is str:
            t = '字符串'
        elif type(obj) is list:
            t = '列表'
        elif type(obj) is tuple:
            t = '元组'
        if len(obj) > 5:
            m = '超过了'
        print('传入的数据类型为:%s, 长度%s5.。。'%(t,m))
    
    check_type((1,2,3,4,5))
    # 4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
    def check_null(obj):
        for i in obj:
            if len(str(i).strip()) == 0:
                print('有空内容')
                return
        print('没有空内容')
    check_null('asdfjalskdfjeiasjdfksldfaje')
    # 5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    def reback(l):
        return l[:2]
    print(reback([1,2,3]))
    # 6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    def reback(l):
        return l[1::2]
    print(reback([1,2,3,4,5,6,7,8]))
    # 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    # dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    #
    # PS:字典中的value只能是字符串或列表
    def reback(d):
        for i in d:
            d[i] = d[i][:2]
        return d
    dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    print(reback(dic))
  • 相关阅读:
    PHP操作redis
    鼠标失去焦点处理办法
    关于HTTP协议,一篇就够了
    什么是 CDN(超形象)
    网站部署之~阿里云系列汇总
    阿里云系列——6.给你的域名使用CDN加速(详细步骤+简单配置)
    mysql备份与还原
    .NET框架之“小马过河”
    .NET使用Bogus生成大量随机数据
    .NET中的值类型与引用类型
  • 原文地址:https://www.cnblogs.com/alwaysInMe/p/6993811.html
Copyright © 2020-2023  润新知