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)
    
posted @ 2020-03-09 15:13  ManIThMrrr  阅读(113)  评论(0编辑  收藏  举报