博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python第六周 学习笔记(3)
阅读量:7114 次
发布时间:2019-06-28

本文共 4854 字,大约阅读时间需要 16 分钟。

习题解析


1.指定一个源文件,实现copy到目标目录

个人实现:

def filecopy(filename:str, cp_filename:str):    '''    Author: lijl    Description: 复制文件    type filename: str    type cp_filename: str    rtype: int    '''    try:        with open(cp_filename, 'w+') as f1, open(filename, 'r') as f2:            f1.write(f2.read())    except Exception as e:        print('Exception :', e)        return 1    return 0

2.有一个文件,对其进行单词统计,不区分大小写,并显示单词重复最多的10个单词

个人实现:

def word_count(filename:str, topN:int):    '''    Author: lijl    Description: 统计单词数量    type filename: str    type topN: int    rtype: None    '''    result = {}    table = str.maketrans('.,/\()+=:\'"', '           ')    #处理非字母字符&插入字典    with open('sample.txt', 'r') as f:        for i in f:                  s = i.lower().translate(table).split()            for j in s:                if j in result.keys():                    result[j] += 1                else:                    result[j] = 1    #将字典按照key排序    topN_lst = sorted(result, key = lambda x:result[x], reverse=True)    for i in range(topN):        print('{}, {}'.format(topN_lst[i], result[topN_lst[i]]))    return

答案参考代码:

3.对sample文件进行不区分大小写的单词统计

  • 要求用户可以排除一些单词的统计

    个人实现:

    def word_count(filename:str, topN:int, *args):'''Author: lijlDescription: 统计单词数量type filename: strtype topN: inttype args: strs rtype: None'''result = {}table = str.maketrans('.,/\()+=:\'"', '           ')#处理非字母字符&插入字典with open(filename) as f:    for i in f:              s = i.lower().translate(table).split()        for word in s:            if word not in args:                result[word] = result.get(word, 0) + 1#将字典按照key排序topN_lst = sorted(result.items(), key = lambda result:result[1], reverse=True)for k, v in topN_lst[:topN]:    print('{}, {}'.format(v, k))return

答案参考代码;

4.有一个配置文件test.ini,将其转换成json格式文件

个人实现:

from configparser import ConfigParserdef ini2json(filename):    '''    Author: lijl    Description: ini转json    type filename: str    rtype: str    '''    section_dict = {}    section_list = []    cfg = ConfigParser()    cfg.read(filename)    if len(cfg.items('DEFAULT')) != 0:        section_list.append('DEFAULT')    section_list += cfg.sections()    for section_name in section_list:        section_dict[section_name] = cfg.items(section_name)    return json.dumps(section_dict)

答案参考代码:

5.实现ls命令功能,实现-l、-a和--all、-h选项

  • 实现显示路径下的文件列表
  • -a和-all 显示包含.开头的文件
  • -l 详细列表显示
  • -h 和-l配合,人性化显示文件大小,例如1K、1G、1T等,可以认为1G=1000M
  • c 字符;d 目录;- 普通文件;l 软链接;b 块设备;s socket文件;p pipe文件,即FIFO
  • -rw-rw-r-- 1 python python 5 Oct 25 00:07 test4
  • mode 硬链接 属主 属组 字节 时间 文件名
  • 按照文件名排序输出,可以和ls的顺序不一样,但要求文件名排序
  • 要求详细列表显示时,时间可以按照“年-月-日 时:分:秒” 格式显示

个人实现:

import osimport argparseimport datetimefrom pathlib import Pathparser = argparse.ArgumentParser(add_help=False)parser.add_argument("dir", type=str, nargs='?', default=Path.cwd())parser.add_argument("-a","--all", action ='store_true')parser.add_argument("-l", action ='store_true')parser.add_argument("-h", "--human", action ='store_true')args = parser.parse_args()if args.dir:    dr = Path(args.dir)MODE_DICT = {'0':'---', '1':'--x', '2':'-w-', '3':'-wx', '4':'r--', '5':'r-x', '6':'rw-', '7':'rwx'}FILE_DICT = {'1':'-','4':'d', '2':'c', '6':'b', '3':'l', '5':'s','7':'p'}#无参数或只有-hif (not args.l and not args.human) or not args.l:    for i in sorted(os.listdir(dr)):        print(i, end=' ')    print()#有-l参数if args.l:    for i in sorted(os.listdir(dr)):        file_path = dr / i        #如果没有-a,不显示隐藏文件        if not args.all and i.startswith('.'):            continue        stat = os.lstat(file_path)        st_mode = str(oct(stat.st_mode))        mtime = datetime.datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S')        #计算文件类型        new_file_kind = FILE_DICT[st_mode[2]]        #计算权限        mode=st_mode[-3:]        new_mode = ''        for m in mode:            new_mode += MODE_DICT.get(m)        #人性化显示文件大小        if args.human:            size = stat.st_size            interval = 1024            for j in ['k', 'M', 'G', 'T']:                temp_size = stat.st_size // interval                if temp_size > 0:                    size = str(round(stat.st_size / interval, 1)) + j                 else:                    break                interval = interval ** 2        print('{}{} {:>2} {} {} {} {} {}'.format(new_file_kind, new_mode, stat.st_nlink, stat.st_uid, stat.st_gid, size if args.human else stat.st_size, mtime, i))    print()

答案参考代码:

6.匹配一个0-999之间的任意数字

个人实现:

\b[0-9]{0,3}\b

答案参考代码:

^([1-9]\d\d?|\d)(?!\d)

7.匹配合法IP地址

个人实现:

^(?:(\d|\d{2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|\d{2}|1\d{2}|2[0-4]\d|25[0-5])$

答案参考代码:

(?:(\d{1,3}).){3}(\d{1,3})

可以把数据提出来后,交给IP地址解析库处理

正则的验证只是一个初步的筛选,把明显的错误过滤掉

import socketnw = socket,inet_aton('192.168.05.001')print(nw, socket.inet_ntoa(nw))

8.选出含有ftp的链接,且文件类型时gz或者xz的文件名

个人实现:

(?<=.*ftp.*)[^/]+(\.(?:g|x)z)$

答案参考代码:

(?<=.*ftp.*/)[^/]*\.(?:gz|xz)

转载于:https://blog.51cto.com/11281400/2109273

你可能感兴趣的文章
Chromium Settings页面修改
查看>>
如何用Python计算Softmax?
查看>>
给你的app添加桌面widget
查看>>
h5移动端混编总结
查看>>
Jvm(57),类加载器----初次认识加载器
查看>>
IntelliJ Idea 常用快捷键列表
查看>>
开始使用Chronograf(官方说明)
查看>>
loading
查看>>
微信小程序:将中文语音直接转化成英文语音
查看>>
debian shell脚本关联
查看>>
静态构造函数(C# 编程指南)
查看>>
如何创建一个WebService
查看>>
NVelocity标签设置缓存的解决方案
查看>>
poj1053
查看>>
用CSS实现无图片背景圆角效果
查看>>
基于ArcGIS10.0和Oracle10g的空间数据管理平台二(C#开发)
查看>>
利用MediaElement控件制作一个简单的播放器
查看>>
SQLServer DBA 三十问之我答(第1~10题)
查看>>
异步调用之精简方式
查看>>
析构函数 Destructor
查看>>