python获取当前目录_又有几个Python小技巧分享

6c6e87ec8e4315f8c0b56bd92cb62c89.png

今天这篇文章为大家带来几个Python使用的小技巧:

  • 快速生成依赖文件

  • 文件路径处理

  • 通过set将对象去重

  • 单元测试unitest捕获异常

快速生成依赖文件

Python通过requirements.txt来管理项目所依赖的库,通过pip install -r requirements.txt命令可以直接安装项目所需要的依赖文件。

常见的requirements.txt生成方法由两种

  • 原生pip工具pip freeze < requirements.txt,这种方法会将当前环境中所安装的库全部导出,即使你在项目中没有使用,只是之前实验时安装的依赖库。

  • 第三方工具pipreqs requirements.txt --encoding=utf-8,该工具使用前需要安装pip install pipreqspipreqs的优点它会扫描项目的依赖,只导出使用的依赖;pipreqs还可以指定扫描目录pipreqs ./ --encoding=utf-8

文件路径处理

Python中常见的文件路径处理方式是通过os.path进行处理。

 1In[2]: import os
2# 获取当前目录的绝对路径
3In[3]: os.path.abspath('./')
4Out[3]: 'D:\\Work\\CommonTools'
5# 进行路径拼接
6In[4]: os.path.join(os.path.abspath('./'),'new_file.py')
7Out[4]: 'D:\\Work\\CommonTools\\new_file.py'
8# 获取父目录
9In[5]: os.path.abspath(os.path.dirname(os.getcwd()))
10Out[5]: 'D:\\Work'
11# 获取文件后缀名
12In[6]: os.path.splitext('new_file.py')[-1]
13Out[6]: '.py'

os.path处理文件路径时,比较复杂、难用,因此可以使用pathlib替代os.path

 1In[2]: import pathlib
2# 获取当前目录的绝对路径
3In[3]: path = pathlib.Path('./')
4In[4]: path=path.absolute()
5In[5]: path.as_posix()
6Out[5]: 'D:/Work/CommonTools'
7# 进行路径拼接
8In[6]: file_path = path / 'new_file.py'
9In[7]: file_path.as_posix()
10Out[7]: 'D:/Work/CommonTools/new_file.py'
11# 获取父目录
12In[8]: path.parent
13Out[8]: WindowsPath('D:/Work')
14# 获取文件后缀名
15In[9]: file_path.suffix
16Out[9]: '.py'
17# 列出当前目录下的py文件
18In[13]: list(path.glob('*.py'))
19Out[13]: [WindowsPath('D:/Work/CommonTools/tools.py')]

更多os.pah库和pathlib库的方法对照,请查看官方文档。

通过set将对象去重

通过set将对象去重要求对象必须实现三个方法:

  • eq:判断两个对象是否相等。

  • ne:判断两个对象是否不等。

  • hash:生成对象的hash值。

set内部可以视作为字典,以对象的hash值作为键,通过hash来判断对象是否重复。但是hash值可能出现冲突,因此还需在hash值相同时,对比两个对象是否相等,这也是为什么需要实现这三个方法的原因。

 1In[2]: class Person(object):
2   ...:    def __init__(self, name, age):
3   ...:        self._name = name
4   ...:        self._age = age
5   ...:
6   ...:    def __eq__(self, other):
7   ...:        if isinstance(other, Person):
8   ...:            return (self._name == other._name) and (self._age == other._age)
9   ...:        else:
10   ...:            return False
11   ...:
12   ...:    def __ne__(self, other):
13   ...:        return not self.__eq__(other)
14   ...:
15   ...:    def __hash__(self):
16   ...:        return hash(self._name + str(self._age))
17   ...:
18   ...:    def __repr__(self):
19   ...:        return f'{self._name}:{self._age}'
20   ...:    
21In[3]: p1 = Person('martin', 24)
22   ...:p2 = Person('martin', 24)
23In[4]: set([p1, p2])
24Out[4]: {martin:24}
25In[5]: p2 = Person('martin', 25)
26In[6]: set([p1, p2])
27Out[6]: {martin:24, martin:25}

单元测试unitest捕获异常

单元测试unitest中提供了两个方法用于捕获异常,判断异常信息是否符合预期:

  • assertRaises():只支持指定异常判断。

  • assertRaisesRegex(异常类型,异常信息正则表达式,测试方法,参数):支持匹配异常信息。

 1import unittest
2
3def divide_exactly(a, b):
4    return a // b
5
6class MyTestCase(unittest.TestCase):
7    def test_division(self):
8        self.assertEqual(divide_exactly(6, 6), 1)
9
10        # 捕获指定异常
11        self.assertRaises(ZeroDivisionError, divide_exactly, 5, 0)
12        # 可以作为上下文管理器使用
13        with self.assertRaises(ZeroDivisionError):
14            divide_exactly(5, 0)
15
16        # 捕获指定异常
17        self.assertRaisesRegex(ZeroDivisionError, 'integer division or modulo by zero', divide_exactly, 5, 0)
18        # 可以作为上下文管理器使用
19        with self.assertRaisesRegex(ZeroDivisionError, 'integer division or modulo by zero'):
20            divide_exactly(5, 0)
21
22
23if __name__ == '__main__':
24    unittest.main()

大家好,我是老表
觉得本文不错的话,转发、留言、点赞,是对我最大的支持。

每日留言

说说你读完本文感受?

或者一句激励自己的话?

(字数不少于15字)

怎么加入刻意学习队伍

点我,看文末彩蛋

留言有啥福利

点我就知道了

想进学习交流群

加微信:jjxksa888

:简说Python6c6e87ec8e4315f8c0b56bd92cb62c89.png

2小时快速掌握Python基础知识要点

完整Python基础知识要点

Python小知识 | 这些技能你不会?(一)Python小知识 | 这些技能你不会?(二)Python小知识 | 这些技能你不会?(三)Python小知识 | 这些技能你不会?(四)近期推荐阅读:【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)觉得不错就点一下“在看”吧 e3f3d79ba4496be01f176d11bbccf5ed.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机弹歌曲做我老婆好不好,做我老婆好不好吉他谱(图片谱,指弹,做我老婆好不好,徐誉滕)_徐誉滕(徐海;徐歆舜)...

做我老婆好不好词曲&#xff1a;徐誉滕演唱&#xff1a;徐誉滕走过多少路口 听过多少叹息我认真着你的不知所措这种迷茫心情 我想谁都会有幸运的是能分担你的愁能不能靠近一点 能不能再近一点满足我心中小小的虚荣其实你并不知道 在我心中你最美就像风雨过后天边的那道彩虹如果…

python敏感字替换_python用类实现文章敏感词的过滤方法示例

过滤一遍并将敏感词替换之后剩余字符串中新组成了敏感词语,这种情况就要用递归来解决&#xff0c;直到过滤替换之后的结果和过滤之前一样时才算结束 第一步:建立一个敏感词库(.txt文本)第二步:编写代码在文章中过滤敏感词(递归实现) # -*- coding: utf-8 -*- # author 代序春秋…

2018年冷链百强_在分析了47,251个依赖关系之后,2016年Java图书馆百强

2018年冷链百强谁在上面&#xff0c;谁在后面&#xff1f; 我们分析了Github上的47,251个依赖关系&#xff0c;并抽取了前100个Java库 对于长周末而言&#xff0c;我们最喜欢的消遣是浏览Github并搜索流行的Java库。 我们决定与您分享乐趣和信息。 我们分析了Github上前3,862…

【FFMPEG应用篇】基于FFmpeg的封装格式转换

/* * 一笑奈何 * cn-yixiaonaihe.blog.csdn.net */#include <iostream> #include <thread> extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #inc…

计算机键盘标注,电脑键盘上怎么打√和×

用电脑键盘上打出√和两个符号的方法1、在输入法开启状态下&#xff0c;鼠标右键点击输入法状态栏上面的“软键盘图标”&#xff0c;然后选择“数学符号”(直接右击打不开就先左击再右击)。2、在数学符号的软键盘面板上直接用鼠标点击“√和”就好(光标要定位在需要输入的地方)…

python中运算符号怎样表示_Python中的运算符与表达式

你所编写的大多数语句&#xff08;逻辑行&#xff09;都包含了表达式&#xff08;Expressions&#xff09;。一个表达式的简单例子便是 23。表达式可以拆分成运算符&#xff08;Operators&#xff09;与操作数&#xff08;Operands&#xff09;。 运算符&#xff08;Operators&…

web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件

web服务优化与健壮性改进在本文中&#xff0c;我们将简要学习构建强大的微服务应用程序所需的各种软件组件。 在简要了解每个架构组件之前&#xff0c;我们将陈述设计微服务架构时出现的一般查询。 1.微服务架构组件 每当我们创建微服务应用程序时&#xff0c;我们都会想到以下…

计算机对油画的影响,现代电脑美术影响下的油画艺术创作

摘要&#xff1a;"21世纪的文盲不是不识字,而是不会读图."随着视觉文化和电脑网络的快速发展,计算机技术也广泛地涵盖了整个意识形态领域.图像已成为这个时代的最大资源,我们已经快速进入"读图时代".九十年代起,计算机图形艺术在科技的带动下飞速发展,电脑…

【FFMPEG应用篇】基于FFmpeg的RGB格式封装MOV文件

/* * 一笑奈何 * cn-yixiaonaihe.blog.csdn.net */#include <iostream> #include <thread> extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #inc…

python launcher卸载后蓝屏_误卸载python2.4导致yum不能用后的修复

去 http://mirrors.ustc.edu.cn/centos/或者镜像下载如下包&#xff0c;版本不一定非常一致 python-2.4.3-56.el5.x86_64.rpm python-devel-2.4.3-56.el5.i386.rpm python-devel-2.4.3-56.el5.x86_64.rpm python-iniparse-0.2.3-6.el5.noarch.rpm python-libs-2.4.3-56.el5.x86…

owin 怎么部署在云中_使用Boxfuse轻松在云中运行Spring Boot应用程序

owin 怎么部署在云中几天前&#xff0c;我开始构建一个将使用REST API检索和存储数据的iOS应用。 该REST API将是我也必须构建的服务器应用程序。 由于我熟悉Java和Spring &#xff0c;因此决定使用Spring Boot作为框架。 为了能够在我的iPhone上使用它&#xff0c;如果我可以在…

【FFMPEG应用篇】基于FFmpeg的PCM数据编码为AAC

/* * 一笑奈何 * cn-yixiaonaihe.blog.csdn.net */#include <iostream> #include <thread> extern "C" { #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #inc…

计算机过程控制系统实例ppt,chap7 前馈控制系统_武汉理工大学:调节仪表与过程控制系统_ppt_大学课件预览_高等教育资讯网...

第七章 前馈及复合控制系统其他反馈控制的缺点&#xff1a;无法将干扰克服在被控制量偏离设计值之前。被控对象总是存在一定的纯滞后和容量滞后&#xff0c;故限制了控制作用的充分发挥。 7-1 基本概念1、问题的提出2、技术思路直接按扰动而不是按偏差进行控制。干扰发生后&…

用python画时序图源代码_使用python实现画AR模型时序图

背景&#xff1a; 用python画AR模型的时序图。 结果&#xff1a;代码&#xff1a; import numpy as np import matplotlib.pyplot as plt """ AR(1)的时序图&#xff1a;x[t]a*x[t-1]e """ num 2000 e np.random.rand(num) x np.empty(num) &…

属性拼接转换成字符串_使用一些可选的将字符串配置属性转换为其他类型

属性拼接转换成字符串有一天&#xff0c;您遇到一些代码&#xff0c;并认为这很漂亮&#xff0c;为什么我没有想到呢&#xff1f; 因此&#xff0c;我的长期同事Mark Warner在使用方法引用处理从String进行转换的标准名称/值存储模式方面有一个不错的选择。 int size store.g…

【FFMPEG应用篇】基于FFmpeg的PCM和RGB数据统一封装

项目采用工程模式进行构造。 技术解决难点&#xff1a; 1.编码后的PTS时间一定要赋值。2.音视频封装同步问题&#xff0c;其中涉及到PTS同步问题&#xff0c;例如视频25PTS/s 音频43PTS/s&#xff08;44100采样率/1024每帧&#xff09;&#xff0c;音频要慢于视频所以这种情…

windows数据自动上传服务器,windows服务器间自动传输文件

日常运维工作中需要在windows服务器间传输文件的使用场景比较多&#xff0c;比较典型的例子为应用程序的离线自动备份&#xff0c;下面分享笔者日常使用的服务器间自动传输文件脚本rem 设置共享net use \\**IP**\程序配置和数据备份 "******(密码)" /user:"admi…

python模块使用_一文让你学会所有的python模块使用

部分高等技能:为了削减一个编译模块的大年夜小&#xff0c;你可以在 Python 敕令行中应用 -O 或者 -OO。-O 参数删除了断言语句&#xff0c;-OO 参数删除了断言语句和 __doc__ 字符串。 因为某些法度榜样依附于这些变量的可用性&#xff0c;你应当只在肯定无误的场合应用这一选…

rest web服务_在WildFly的REST Web服务中与Jackson的双向关系

rest web服务这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例。 假设我们在两个实体Parent和Child之间存在双向关系。 使用MySQL工作台为这两个表生成SQL模式文件。 DROP SCHEMA IF EXISTS bidirectional_schema ; CREATE SCHEMA IF NOT EXISTS bidirectional…

【开源项目】基于Directx屏幕录制

#include<d3d9.h> #include<iostream> #pragma comment(lib,"d3d9.lib") using namespace std; //截取全屏 void CaptureScreen(void *data) {//1 创建directx3d对象static IDirect3D9 *d3d nullptr;if (!d3d){d3d Direct3DCreate9(D3D_SDK_VERSION);…