1. os.getcwd()
os.getcwd()返回工作目录,工作目录(Working Directory)是指当前用户或程序正在其中执行命令或访问文件的目录。在操作系统中,当你打开一个命令行界面(如终端、命令提示符)或运行一个程序时,都有一个与之关联的工作目录。这个目录是相对于该环境而言的当前位置,用于解析相对路径。
os.getcwd() 函数是 Python 标准库 os 模块中的一个函数,用于获取当前工作目录的绝对路径。这个函数通过查询操作系统来确定当前进程的工作目录,并将其作为一个字符串返回。
具体来说,os.getcwd() 如何确定工作目录,取决于操作系统提供的机制。在 Unix-like 系统(如 Linux 和 macOS)中,这通常涉及到查询当前进程的环境信息,该信息中包含了工作目录的路径。在 Windows 系统中,机制可能有所不同,但同样依赖于操作系统提供的API来查询当前进程的工作目录。
当 Python 程序(或 Python 交互式解释器)启动时,它的工作目录通常是启动该程序或解释器的那个目录。但是,在程序执行过程中,可以使用 os.chdir(path) 函数来改变工作目录,这时 os.getcwd() 返回的将是新的工作目录路径。
需要注意的是,os.getcwd() 返回的是绝对路径,这意味着它是一个从根目录开始的完整路径,不受当前工作目录的相对位置影响。这对于需要精确处理文件路径的程序来说是非常有用的。
所以python返回的工作目录是执行python命令的那个目录,所以这个目录很重要,不能随便用来删除目录,我不小心就把自己的源码目录给删除了,还好有GitHub。
2. timezone
python有第三方库pytz
,python 3.9版本以上有一个自带的库zoneinfo
。我必须吐槽一下,这个timezone库就这么不重视吗,这么晚才有。
2.1 不带timezone的创建方法
1 | date1= datetime.now() |
这3种都是不带timezone,但是有个地方要注意,date1虽然没带,但是如果打印它,是当前的系统timezone下的时间,而非UTC时间,所以就是它没有这个tzinfo
的属性,但是就是用了。
2.2 带有timezone的创建方法
1 | tz = pytz.timezone('Asia/Shanghai') |
这里就是给datetime.now一个tzinfo,无论给它什么样的tzinfo,最近它们的本质还是一样的,都是同一个时间,不同点只是tzinfo不同。注意localize只能对没有tzinfo的值设置,而replace没有这个限制。
尽管实参一样,但是local_date和utc_date的表示时间却是不一样的,因为date2原来没有tzinfo,调用了不同的tzinfo.localize方法后,产生的时间就是不一样的,所以这需要知道你的实参的timezone是什么,才能正确的给它设置timezone。
2.3 timezone转换
1 | # 将UTC时间转换为上海时间 |
当我们有一个带有timezone的时间,想转为另一个timezone的时间,从时间本身来讲,它们是一样的,只不过是影响了表现形式。这里的作用就是给用户看的时候,他能理解这个是他的时区的时间,所以这种转换就是为了输出可视化字符串。
由于replace
过于粗暴,所以还是最好别用了, replace中传入pytz.tzinfo就有bug。实在要用就用zoneinfo,不要用pytz。
2.4 时间比较
时间比较需要注意的是,要么两个时间都不带timezone,要么都带,不能一个带一个不带。所以推荐都带,两个时间相减时,得到timedelta
。因为有些服务的API返回的date是带有timezone的,所以最好我们自己的时间也带上。