python tips(未整理)
-
python 复制文件 ,即二进制读写文件
with open('file1', 'rb')as fp1, open('file2', 'wb') as fp2: content = fp1.read() file2.write(content)
-
os.path.dirname 取最后个'\'前的路径
# 取上级目录名 path = os.path.dirname('c:\code\python\1.py') parent_path = os.path.dirname(path)
-
创建文件:
open('newfile.py', 'w').close()
-
查找.py文件
file = os.path.basename(path) file.endswith('.py') # 返回bool
-
bool类型返回0或1
# bool 可以返回0或1 print(bool('hello')) print(('f','t')[bool('hello')]) # 返回t print('sunny'[bool('')]) # 返回s
-
字符串间去除空格
a = '1 2 3' a = ''.join(a.split()) # a = a.replace(' ', '')
-
_ file _ , _ name _
print(__file__) # 表示当前正在执行的文件,pycharm下为自行添加的绝对路径,在python里只有文件名 print(os.path.abspath(__file__)) # 在其他ide或者cmd下必须取得绝对路径才是完整的路径 print(__name__) # 在当前文件中是__main__, 被其他模块调用是 模块名 if '__name__' == '__main__': pass # 需在当前文件中执行的功能, 当被其他模块调用时不执行
-
sys.path 模块能否导入是看sys.path中是否包含了此文件或者包的路径
# 如要使用上层目录下的包或模块,sys.path 添加入上层目录的路径 project_path = os.path.dirname(os.path.dirname(__file__)) # 往上翻两层, 取得上层目录的路径 sys.path.append(project_path) from core import main
-
input(), 输入'r', r 表示移到行首且不换行
-
print() 自带一次换行,print('\n')相当于换行2次
for i in range(2): print(i, end='') print() for i in range(2): print(i)
-
from urllib import request: urllib 是包即目录,request是模块
from urllib.request import urlopen from urllib import request import urllib
-
re模块变量的表达式
re.compile(r’表达式’+变量+’表达式’) re.compile(r’表达式(%s)表达式’ %变量)
-
判断是类方法还是函数
# 类方法和函数都有自己的类 # 方法会自动传self,cls值 # 看是否是函数还是方法,看是由哪个对象调用, (类变量或类方法推荐用类调用,self也可以找到并调用) # 如果是由实例对象调用的,则是方法, 会自动传self或cls(方法会自动传self) # 如果是由类调用的, 则是函数, 需要手动传self(函数需要手动传self) # 如果前面不加调用者的,是函数 1. print(func_method_name)查看 2. form types import FunctionType, MethodType isinstance(func_method_name, FunctionType) isinstance(func_method_name, MethodType) class Foo: def func(self): pass def run(self): Foo.func(self) # 类中调用 传self obj = Foo() obj.func() # 实例对象调用是方法,会自动传self Foo.func(obj) # 如果由类调用的实例方法是函数,需要手动传obj(即self)
-
字符串,列表互转
''.join([1,2,3]) # 转字符串 s.split('') # 转列表
-
切片,copy.copy:浅拷贝, copy.deepcopy:深拷贝
a = [1,2,3,4] b = a[:] # 浅拷贝 b = a # 引用,非拷贝
-
__setitem__, __getitem__ : obj[key] = value, res = obj[key]
class Foo(object): def __init__(self): self.info = {} def __setitem__(self, key, value): self.info[key] = value def __getitem__(self, item): return self.info.get(item) obj = Foo() obj['name'] = 'sunny' print(obj['name'])
-
__setattr__, __getattr__: obj.x = 1, res = obj.x
-
dict.setdefault(key, value=None):
-
字典中不存在key,则新建key,并设置指定的value值,默认None,返回value值。等价于dict[key]=value
-
字典中存在key, 则不会修改键值,返回存在的key对应的value。等价与dict.get(key)
dic = {'sunny': 20, 'vickey': 10} new = dic.setdefault('ethan', 6) # new =6, dic = {'sunny':20, 'vickey':10, 'ethan':6} new1 = dic.setdefault('ethan', 8) # new = 6, dic = {'sunny':20, 'vickey':10, 'ethan':6}
-
-
‘_'下划线跳过无用的变量
grades = [] grades.append(95, 0.5, 'Great job') # 分数,权重,评语(无用,不参与计算) total = sum(score * weight for score, weight, _ in grades) # sum等计算函数, 容器类函数如list,tuple可直接迭代生成器 total_weight = sum(weight for _, weight, _ in grades)