python入门一篇博文就够了

1】关于python的“入口函数”

python没有像大多数语言那样有一个Main()入口函数,python脚本的执行会依次执行脚本内的每行代码(除def后定义的函数外)。
那有些人会问,python里面的 if name == “main”: 是怎么回事?看下面的一个

hello.py:

print("001")

#自定义一个方法
def sayName():
    print("003,__name__ is " + __name__)

if __name__ == "__main__":
    print ("002,__name__ is " + __name__)
    sayName()													#调用自定义的方法

运行结果:
001
002,__name__ is __main__
003,__name__ is __main__

代码中的__name__只是python的一个内置属性,代表当前python文件被调用的方式。如果python脚本是被自己调用的,该值就是__main__。而如果是其他模块import了自己,这个值就是自己的名字(hello),看下面的代码:

computer.py:

print("004")
import hello
print("005")
 
if __name__ == "__main__":
    print("006,__name__ is " + __name__)
    hello.sayName()
    print("007,__name__ is " + __name__)


运行结果:
004
001
005
006,__name__ is __main__
003,__name__ is hello
007,__name__ is __main__

computer.py 执行到import hello时,会进入hello.py内运行程序,输出001,但是此时hello.py的 name 因为是外部调用,所以__name__ == hello,不满足
== " main " 的条件(因文本编译原因main两边的下划线没显示出来),不再执行hellp.py后续内容。

2】python 简单的字符串替换

需求:删除文本文件中所有的0-9,并统一在末尾添加0-9。
parseFont.py

# -*- coding: utf-8 -*-
'''
	Usage:
		Add all specific characters in the text to the end after deduplication
	用法:
		将文本内的特定字符去重后添加到末尾
'''
import os

#要处理的文件名称
fixFileName = "Fonts.txt" 

#需要删掉的字符
removeStr = ["0","1","2","3","4","5","6","7","8","9"]

#需要新增的字符
addStr = "0123456789"   

#定义重新生成文本的方法
def RegenerateTextFiled():
	oldFile = os.path.join("./", fixFileName)   #python拼接路径用join
	print("fixFilePath : " + oldFile)   		#打印一下路径
	with open(oldFile, 'r') as f:			    #打开文件,只读
		text = f.read()							#获取文本内容
		print("old text:%s"%text)				#打印一下最开始的文本内容
		for rs in removeStr:					#遍历需要去除的字符数组
			if rs in text:						#如果文本内存在
				text = text.replace(rs, "")		#替换掉
		print("new text:%s"%text)				#再打印下文本
		text += addStr							#将需要添加的字符串拼接上
		print("final text:%s"%text)				#再打印下添加后的文本
	with open(oldFile, 'w') as f:				#打开文件,写
		f.write(text)							#写入文本内容
	
#自定义Main()方法
def Main():
	RegenerateTextFiled()						#调用我们定义的方法

#执行Main()方法,注意:python脚本内的代码会依次执行
#(除def后定义的函数外,所以,执行到这里就走入Main()方法中了,并非python自带的入口函数)
Main()


运行结果:
fixFilePath : ./Fonts.txt
old text:123哈哈4哈哈5哈哈哈哈哈6哈哈8哈哈1哈哈2哈哈3哈哈4
new text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
final text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈0123456789

3】python 模块之间的调用

需求同上,我们稍微加入模块的内容,看代码:
myPython.py

# -*- coding: utf-8 -*-
'''
	Usage:
		Introduce a custom module and call its methods
	用法:
		引入自定义模块,并调用其中的方法
'''
import os
import parseFont     #引入上文中我们的parseFont模块
print("--------------------------------------------------------------------------------------------------------")

#定义一个FontManager类
class FontManager:
	def __init__(self,name):					#定义类的初始化方法(必须带self,代表类的实例),如果想在初始化的时候传参,例如name
		print("class FontManager init success, param is :" + name)
		self.name = name						
	#定义一个方法,必须带有self
	def RegenerateFile(self):
		print("self.name is :" + self.name)		#使用传进来的参数
		parseFont.RegenerateTextFiled()			#调用parseFont模块内的RegenerateTextFiled方法


#自定义Main()方法
def Main():
	font = FontManager("fontInstance")			#传参name,如果没有参数,注意必须带有(),否则系统不认为是class
	font.RegenerateFile()						#调用FontManager类中的RegenerateFile方法

#执行Main()方法
Main()

运行结果:
fixFilePath : ./Fonts.txt
old text:11111哈哈哈222222222哈哈哈4444444哈哈哈哈哈哈5555哈哈哈哈哈哈哈哈哈
new text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
add text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈0123456789
--------------------------------------------------------------------------------------------------------
class FontManager init success, param is :fontInstance
self.name is :fontInstance
fixFilePath : ./Fonts.txt
old text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈0123456789
new text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
add text:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈0123456789

有小伙伴注意到,parseFont.py内的regenarateTextFiled()方法执行了两次。还记得上文说过,python代码依次执行吗,import parseFont 进入parseFont.py方法也会执行一遍。

4】python 文本内删除特定字符串的行数据

当我们有大量日志,需要筛掉无用的日志的时候,可以根据每行日志里的特定字符进行筛选,直接上代码

import os

oldFilePath = "originalLog.txt"
NewFilePath = "newLog.txt"

mathcStr = "inner_order_id is invalid!"

def removeSucess():
	with open(oldFilePath, 'r') as f:  //读取源日志数据
		lines = f.readlines()
	with open(NewFilePath, 'w') as w:  
		for l in lines:   			   //遍历源数据,根据匹配字符串,写入新文件
			if mathcStr in l:
				w.write(l)

if __name__ == "__main__":
	removeSucess()
	

5】python 解析json数据

config.json内容

{
    "zhangsan":{
		"name": "zhangsan",
		"age": "13",
	}
}

解析示例

import json

#load json data
def LoadSDKConfig(MainKey):
    sdkConfigPath = os.path.join(os.getcwd(), "./config.json")
	
	#if not os.path.isfile(sdkConfigPath):
	#	print("not have sdkConfigPath:%s"%sdkConfigPath)
	#	exit()
		
    f = open(sdkConfigPath, 'r')
    setting = json.load(f)  #load json data

    if MainKey in setting:
        moduleConfig = setting[MainKey]  #第一层
    #    print("moduleConfig:%s"%moduleConfig)
        return moduleConfig
    else:
        print("not found setting, MainKey: %s"%MainKey)
        
def UseJsonConfig():
	config = LoadSDKConfig("zhangsan")
	for key in config:
		print("key:%s"%key)  #第二层,打印key
		print("value:%s"%config[key])  #第二层,打印value
		
if __name__ == "__main__":
	UseJsonConfig()

6】python os相关操作

import os

def operateOS():
	oldPath = os.getcwd() + "/first/111.txt"
	newPath = os.getcwd() + "/second/222.txt"
	#修改文件名称以及路径, 操作等同于将111.txt剪贴,复制到second下面,并修改名字为222.txt
	os.rename(oldPath, newPath)

7】python 获取apk信息(包名,版本号,版本名称)并重命名apk

import os,re

def changeObbName(packageName, versionCode):
    oldName = os.getcwd() + "/water.main.obb"
    newName = os.getcwd() + "/main." + versionCode + "." + packageName + ".obb"
    if os.path.exists(newName):
        os.remove(newName)
    if os.path.exists(oldName):
        os.rename(oldName, newName)   #修改名字以及目录
        print("rename obb success: %s" %newName)

# get app packageName, versionCode, versionName  return match
def getAppBaseInfo(apk_path):
    get_info_commond = "source ~/.bash_profile && aapt dump badging %s " %apk_path   #先执行一下source ~/.bash_profile   因为每次启动设置的环境变量都失效,所以先执行下,否则aapt找不到
    output = os.popen(get_info_commond).read()  #得到的就是包的信息,string类型
    match = re.compile("package: name='(\S+)' versionCode='(\d+)' versionName='(\S+)'").match(output)   #正则匹配
    if not match:
        print ("can not get packageinfo")
    
    return match
	
def changeObbNameByPath(apk_path):
	apkInfoMatch = getAppBaseInfo(apk_path)
	if apkInfoMatch:
		print("apk info: %s" %apkInfoMatch.group())
		changeObbName(apkInfoMatch.group(1), apkInfoMatch.group(2))

def Main():
	apk_path = os.getcwd() + "rename.apk"
	changeObbNameByPath(apk_path)

Main()

8】python 二分查找实现

知识点:
1】二分查找
2】取数组长度 ,len(arr)
3】强转int , int(num)
4】三目运算符 , m = 3 if a < b else 4
5】类方法的调用

# -*- coding:utf-8 -*-

"""
    二分查找升序数组内某个值
"""

import os
import sys


class Solution(object):
    def search(self, nums, left, right, target):
        #找完了 return -1
        if left > right:
            return -1
        #就剩一个了,直接判断
        if left == right:
            return left if nums[left] == target else -1

        #转换int  int()
        mid = ( int(left) + int(right)) /2
        if nums[mid] == target:
            return mid

        #调用方法需要用self调用, 不用传入self
        return self.search(nums, 0, mid-1, target) if nums[mid] > target  else self.search(nums, mid+1, right, target)

    def Search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        #调用方法需要用self调用, 不用传入self
        #计算数组长度 len()
        return self.search(nums, 0, len(nums), target)


def main():
    #实例化类
    ca = Solution()
    #测试数据
    nums = [1,2,3,7,9,10]
    #调用类的方法
    result = ca.Search(nums, 9)
    print result

main()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值