专栏首页杨建荣的学习笔记Python基础之os和数据结构

Python基础之os和数据结构

今天总结了下Python的基础,发现还是有很多基础需要巩固,直接把学习的内容放上来。

>>> import os
得到当前的所在的路径
>>> os.getcwd()
'/root/test'
列出当前路径所在的文件夹下的文件
>>> os.listdir(os.getcwd())
['a.py', 'redis_test.sql', 'cmdb_server.txt', 'a.sql', 'test.py', 'redis_test.txt', 'paramiko.pyc', 'cmdb_server.txt.bak', 'paramiko.py', 'requirements_add.txt', 'test.txt', 'opsmanage.tar.gz', 'test.sql']
返回当前的绝对路径
>>> os.path.abspath('.')
'/root/test'
得到当前路径上一次的绝对路径
>>> os.path.abspath('..')
'/root'
把路径分解为路径和文件名
>>> os.path.split('/root/test/test.py')
('/root/test', 'test.py')

>>> os.path.split('.')
('', '.')
将路径进行合并
>>> os.path.join('/root/test','test.py')
'/root/test/test.py'
返回指定path的文件夹部分
>>> os.path.dirname('/root')
'/'
返回当前path的文件夹
>>> os.path.dirname(os.getcwd())
'/root'
得到当前的路径,和上面的可以互为印证
>>> os.getcwd()
'/root/test'
返回path中的文件名
>>> os.path.basename('/root/test/test.py')
'test.py'
返回path中的子文件夹
>>> os.path.basename('/root/test')
'test'
>>> os.path.basename('/root/test/')
''
得到文件或文件夹的最后修改时间
>>> os.path.getmtime('/root/test/test.py')
1521193690.4832795
得到文件或文件夹的大小,注意文件夹的部分得到的可能不是真实的大小,不是du -sh 类似的结果
>>> os.path.getsize('/root/test/test.py')
29
查看文件或者文件夹是否存在
>>> os.path.exists('/root/test/test.py')
True
>>> os.path.exists('/root/test/test.py22')
False
一些路径在不同操作平台的表示
>>> os.sep
'/'
>>> os.extsep
'.'
>>> os.linesep
'\n'
>>> os.pathsep
':'
得到目录下的文件
>>> os.listdir(os.getcwd())
['dict.py', 'sqlplan.py', 'deploy.pyc', 'task_manage.py', 'cron.py', 'mysql_manage.py', 'system_manage.pyc', 'cmdb.pyc', 'deploy.py', 'ansible.pyc', 'index.py', 'tuning.ini', 'cron.pyc', 'backup.pyc', 'mysql_manage.pyc', 'users.py', 'celeryHandle.py', 'assets.pyc', '__init__.pyc', 'ansible.py', '__init__.py', 'task_manage.pyc', 'cmdb.py', 'users.pyc', 'assets.py', 'system_manage.py', 'index.pyc', 'dict.pyc', 'backup.py']
对当前目录下的文件存入列表
>>> lists=os.listdir(os.getcwd())
对列表进行排序
>>> lists.sort()
得到列表
>>> print(lists)
['__init__.py', '__init__.pyc', 'ansible.py', 'ansible.pyc', 'assets.py', 'assets.pyc', 'backup.py', 'backup.pyc', 'celeryHandle.py', 'cmdb.py', 'cmdb.pyc', 'cron.py', 'cron.pyc', 'deploy.py', 'deploy.pyc', 'dict.py', 'dict.pyc', 'index.py', 'index.pyc', 'mysql_manage.py', 'mysql_manage.pyc', 'sqlplan.py', 'system_manage.py', 'system_manage.pyc', 'task_manage.py', 'task_manage.pyc', 'tuning.ini', 'users.py', 'users.pyc']
sort按key的关键字进行升序排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间,所以最终以文件时间从小到大排序
最后对lists元素,按文件修改时间大小从小到大排序
>>> lists.sort(key=lambda fn:os.path.getmtime(os.getcwd()+'/'+fn) )
>>> print(lists)
['__init__.py', 'deploy.py', 'cron.py', 'ansible.py', '__init__.pyc', 'cron.pyc', 'deploy.pyc', 'ansible.pyc', 'assets.py', 'assets.pyc', 'celeryHandle.py', 'sqlplan.py', 'tuning.ini', 'dict.py', 'dict.pyc', 'index.py', 'index.pyc', 'task_manage.py', 'task_manage.pyc', 'users.py', 'users.pyc', 'system_manage.py', 'system_manage.pyc', 'cmdb.py', 'cmdb.pyc', 'backup.py', 'backup.pyc', 'mysql_manage.py', 'mysql_manage.pyc']
得到文件的扩展名,如果输入是文件夹,返回为空
>>> os.path.splitext(os.getcwd())
('/root/OpsManage-master/OpsManage/views', '')
>>> os.path.splitext('/root/OpsManage-master/OpsManage/views/task_manage.pyc')
('/root/OpsManage-master/OpsManage/views/task_manage', '.pyc')
列出当前目录下所有的.py文件
>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
['dict.py', 'sqlplan.py', 'task_manage.py', 'cron.py', 'mysql_manage.py', 'deploy.py', 'index.py', 'users.py', 'celeryHandle.py', 'ansible.py', '__init__.py', 'cmdb.py', 'assets.py', 'system_manage.py', 'backup.py']

数据结构操作

列表操作
>>> header=[1,2,3]
>>> dat=[3,2,1]
列表转换为字典
>>> dict(zip(header,dat))
{1: 3, 2: 2, 3: 1}
运行操作系统命令,使用popen
>>> cmd='hostname'
>>> os.popen(cmd)
<open file 'hostname', mode 'r' at 0x7f416e1d45d0>
>>> os.popen(cmd).read()
'dev01\n'

运行操作系统命令,使用commands,这个返回更丰富一些
>>> import commands
>>> commands.getstatusoutput('hostname')
(0, 'dev01')

列表的追加
>>> ll=['a','b','c','d']
>>> ll.append('jeanron100')
>>> print(ll)
['a', 'b', 'c', 'd', 'jeanron100']
判断列表元素是否存在
>>> print ll.count('jeanron100')
1
>>> print ll.count('jeanron1000')
0
列表的组合,如果是两个列表,效果就更清晰了
>>> ll.extend(['jeanron','jianrong'])
>>> print(ll)
['a', 'b', 'c', 'd', 'jeanron100', 'jeanron', 'jianrong']
删除指定元素
>>> ll.remove('jeanron')
>>> print(ll)
['a', 'b', 'c', 'd', 'jeanron100', 'jianrong']
反向输出列表元素
>>> ll.reverse()
>>> print(ll)
['jianrong', 'jeanron100', 'd', 'c', 'b', 'a']

列表排序
>>> ll.sort()
>>> print(ll)
['a', 'b', 'c', 'd', 'jeanron100', 'jianrong']
字典操作
>>> info={'name':'jeanron','age':33,'gender':'male'}
>>> print info.get('name')
jeanron
输出字典的键值
>>> print info.keys()
['gender', 'age', 'name']
>>> print info.items()
[('gender', 'male'), ('age', 33), ('name', 'jeanron')]
以列表返回字典中的所有值
>>> print info.values()
['male', 33, 'jeanron']
集合操作
>>> info={'my','name','is','jeanron'}
>>> print info
set(['jeanron', 'is', 'my', 'name'])
>>> test_info={'this','is','a','test'}
集合交集
>>> print info&test_info
set(['is'])
合集
>>> print info.union(test_info)
set(['a', 'name', 'this', 'is', 'jeanron', 'test', 'my'])
并集
>>> print info|test_info
set(['a', 'name', 'this', 'is', 'jeanron', 'test', 'my'])

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dg broker配置的问题及分析 (r7笔记第22天)

    今天在配置一个备库的时候碰到了一些问题,话说配置dg broker真没什么特别需要注意的细节了,本身已经给DBA省了很大的事儿了。 但是有时候就是会出现一些稀奇...

    jeanron100
  • MySQL的主键命名挺任性,就这么定了

    最近在梳理数据生命周期管理的细节时,发现了一个小问题,那就是MySQL的主键命名策略,似乎会忽略任何形式的自定义命名。

    jeanron100
  • MySQL误操作数据恢复的简单实践(r11笔记第67天)

    前几天有个同事碰到了一个MySQL数据恢复的问题,他运行了一条update语句,结果忘记了加where条件,结果等反应过来已经晚了。我简单确认了下,是否...

    jeanron100
  • Python爬虫-05:Ajax加载的动

    例子:http://www.kfc.com.cn/kfccda/storelist/index.aspx

    py3study
  • VSCode配合pipenv搞定虚拟环境的实现方法

    VSCode指定Python路径快捷运行py脚本之前写过了,这样配置有一个问题:所有的python脚本都使用的同一个python来执行的.现在是虚拟环境的天下,...

    砸漏
  • Python打包利器:auto-py-to-exe

    auto-py-to-exe 是一个用于将Python程序打包成可执行文件的图形化工具。本文就是主要介绍如何使用 auto-py-to-exe 完成 pytho...

    披头
  • [译] 使用 TheGraph 完善Web3 事件数据检索

    以前我们看过Solidity的大图和create-eth-app,它们之前已经提到过TheGraph。这次,我们将仔细研究TheGraph,它在去年已成为开发D...

    Tiny熊
  • Tesseract-OCR识别中文与训练字库实例

    关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。 文中所用到的身份证图片资源...

    貟王軍
  • NodeJs-安装与npm介绍

    NodeJS封装了网络,文件,安全加密,压缩等等很多功能模块,我们只需要学会常用的一些,然后在需要的时候去查询文档即可。

    efonfighting
  • GitHound:一款针对GitHub的API密钥和敏感数据搜索工具

    GitHound可以利用模式匹配、提交历史搜索和一个独特的结果评分系统来精确定位GitHub上的公开API密钥,从本质上来说,GitHound就是一款基于批量爬...

    FB客服

扫码关注云+社区

领取腾讯云代金券