在python控制台(也即命令行界面)下,直接使用print __file__
会导致name __file__ is not defined
,因为这时(python命令行环境)没有在任何一个脚本(.py)文件下执行,自然没有__file__的定义了。
sys.platform
makedirs()
:将创建所有的中间路径(intermediate directories),即使这些中间目录并不存在(等同于bash环境下的:mkdir-p
)。
mkdir()
用来创建一个单独的子目录,如果在参数中指定中间目录,将会抛出异常。
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: './1/2/3/4'
两者均可创建单独的叶子
目录:
makedirs
可以用来创建分支:
os.mkdir('dirA/dirB')
:抛异常,如果dirA不存在的话os.makedirs('dirA/dirB')
:成功和bash环境下的mkdir -p
所不同的一点是,两者都会创建失败如果叶子
目录,本身即已存在。
# 上层路径
print os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir)
)
# 上上层路径
print os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
)
os.path.split(__file__)
# 返回的是一个元组类型,
# 有两个元素构成,分别是路径信息以及文件名
print os.path.split(__file__)[0], os.path.dirname(__file__)
print os.path.split(__file__)[0], os.path.basename(__file__)
获取主执行文件的最佳方法是sys.argv[0],它可能是一个相对路径,所以再取一次绝对路径是一个双保险的做法:
import os
import sys
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
print 'running from', dirname
print 'file is', filename
def make_dir(_dir):
if os.path.exists(_dir):
return True
try:
os.makedirs(_dir)
return True
except:
return False
Return a string of n random bytes suitable for cryptographic use.
随机产生n个字节的字符串,可以作为随机加密key使用~
我们就简单举一个它在异或密码中的应用,详见 逻辑代数。
from os import urandom
def genkey(n):
return urandom(n).decode('gbk', 'ignore')
def o(x):
return ord(x) if isinstance(x, str) else x
def xor_strings(s1, s2):
return ''.join(chr(o(i)^o(j)) for i, j in zip(s1, s2))
if __name__ == '__main__':
message = "This is a secret message"
key = genkey(len(message))
crypted = xor_strings(message, key)
print(xor_strings(crypted, key))