赞
踩
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
# 标准范例
spam(ham[1], {eggs: 2}, [])
if x == 4:
print x, y
x, y = y, x
dict['key'] = list[index]
def complex(real, imag=0.0): return magic(r=real, i=imag)
# 模块名命名 # 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) import decoder import html\_parser # 变量命名 # 变量名尽量小写, 如有多个单词,用下划线隔开。 count = 0 this_count = 1 # 常量或者全局变量命名 # 全部大写,如有多个单词,用下划线隔开,全⼤写+下划线式驼峰 MAX\_COUNT = 99 # 函数命名 # 函数名应该小写,如有多个单词,用下划线隔开。 大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用,保持向后兼容。 私有函数在函数前加一个下划线_。 def run(): pass def run\_with\_env(): pass class Person(): def \_private\_func(): pass # 类命名 # 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。 # 在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。 # 对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。 class Farm(): pass class AnimalFarm(Farm): pass class \_PrivateFarm(Farm): pass
# python1.py 范例代码 def func(a=1): b = 2 print(locals()) # 打印当前函数(方法)的局部命名空间 ''' locs = locals() # 只读,不可写。将报错! locs['c'] = 3 print(c) ''' return a+b func() glos = globals() glos['d'] = 4 print(d) print(globals()) # 打印当前模块 python1.py的全局命名空间(可写)
注:
- 不要中英文混编
- 不要有
a、b、c
这种没有意义的命名- 不要怕名字长就随便缩写,比如
good_info
缩写成gi
- 不要用大小写区分变量类型,比如a是
int
类型,A是String
类型- 不要使用容易引起混淆的变量名
- bool变量⼀般加上前缀
is_
如:is_success
- 变量名不要用系统关键字,如
dir type str
等等- 用下画线作前导(
_simple_done
)或结尾(simple_done_
)的特殊形式是被公认的
One('hello world?')
Tow("my site is vitian.vip") # 单引号和双引号字符串是相同的。
Three('"hell!" vitian.') # 在同一个文件中,保持使用字符串引号的一致性。在字符串内可以使用另外一种引号,以避免在字符串中使用。
导入应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。导入应该按照从最通用到最不通用的顺序分组:标准库导入、第三方库导入、应用程序指定导入,分组之间空一行。尽量保持模块名简单,以无需分开单词最佳(不推荐在两个单词之间使用下划线)。
import os # 模块名称要短,使用小写,并避免使用特殊符号, 比如点和问号。
import numpy # 每个导入应该独占一行。
import sys
from types import StringType, ListType
def main():
... # 主功能应该放在一个main()函数中。
if __name__ == '__main__': # 代码应该在执行主程序前总是检查 if __name__ == '__main__', 这样当模块被导入时主程序就不会被执行。
main()
__version__ = "$Revision: 1.4 $"
# $Source: E:/cvsroot/python_doc/pep8.txt,v $ 将 RCS 或 CVS 的杂项包含在你的源文件中
# 对于 CVS 的服务器工作标记更应该在代码段中明确出它的使用说明,如在文档最开始的版权声明后应加入如下版本标记:
# 文件:$id$
# 版本:$Revision$
# 这样的标记在提交给配置管理服务器后,会自动适配成为相应的字符串
# 文件:$Id: ussp.py,v 1.22 2004/07/21 04:47:41 hd Exp $
# 版本:$Revision: 1.4 $
模块 module: 一般情况下,是一个以.py
为后缀的文件。其他可作为module
的文件类型还有".pyo
"、“.pyc
”、“.pyd
”、“.so
”、“.dll
”。
module
可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module
以便让代码更好用、易懂,让coder重点放在高层逻辑上。
module
能定义函数、类、变量,也能包含可执行的代码。
module
来源有3种:①Python内置的模块(标准库);②第三方模块;③自定义模块。
当一个文件夹下有 __init__.py
时,意为该文件夹是一个包(package
),其下的多个模块(module
)构成一个整体,而这些模块(module
)都可通过同一个包(package
)导入其他代码中。
__init__.py
文件用于组织包(package
),方便管理各个模块之间的引用、控制着包的导入行为。在__init__.py
导入我们需要的模块,以便避免逐一导入、方便使用。
sys.modules
是一个 将模块名称(module_name
)映射到已加载的模块(modules
) 的字典。可用来强制重新加载modules
。Python一启动,它将被加载在内存中。
import sys
print(sys.modules) # 打印,查看该字典具体内容。
所有的模块import都从“根节点”开始。根节点的位置由sys.path
中的路径决定,项目的根目录一般自动在sys.path中。
import sys,os
BASE\_DIR = os.path.dirname(os.path.abspath(__file__)) # 存放c.py所在的绝对路径
sys.path.append(BASE\_DIR)
from B.B1 import b1 # 导入B包中子包B1中的模块b1
只关心相对自己当前目录的模块位置就好。不能在包(package
)的内部直接执行(会报错)。不管根节点在哪儿,包内的模块相对位置都是正确的。
# b1.py代码
# from . import b2 # 这种导入方式会报错。
import b2 # 正确
b2.print\_b2()
# b2.py代码
def print\_b2():
print('b2')
# 运行b1.py,打印:b2。
re 库
是 Python 中处理正则表达式的标准库,本篇博客介绍 re 库的同时,简单介绍一下网络爬虫初阶正则表达式语法。
操作符 | 说明 | 例子 |
---|---|---|
. | 任何单个字符,极少不能匹配 | |
[] | 字符集,对单个字符给出取值范围 | [abc] 表示匹配 a、b、c,[a-z] 表示 a 到 z 单个字符 |
[^] | 非字符集,对单个字符给出排除范围 | [^abc] 表示匹配 非 a、非 b、非 c 的单个字符 |
* | 前一个字符 0 次或无限次扩展 | abc* 表示 ab、abc、abcc、abccc 等 |
+ | 前一个字符 1 次或无限次扩展 | abc+ 表示 abc、abcc、abccc 等 |
? | 前一个字符 0 次或 1 次 | abc? 表示 ab、abc |
丨 | 左右表达式任意一个 | abc丨def 表示 abc 或者 def |
{m} | 扩展前 1 个字符 m 次 | ab{2}c,表示 abbc |
{m,n} | 扩展前 1 个字符 m 到 n 次 | ab{1,2}c,表示 abc、abbc |
^ | 匹配字符串开头 | ^abc 表示 |
$ | 匹配字符串结尾 | abc$ 表示 |
() | 分组标记,内部仅能使用操作符 | (abc) 表示 abc,(a |
\d | 数字,等价于 [0-9] | |
\w | 字符,等价于 [A-Za-z0-9] |
re 库主要函数如下:
基础函数:compile
;
功能函数:search
、match
、findall
、split
、finditer
、sub
。
# 不使用原生字符串的正则表达式 "\\\\" # 使用原生字符串的正则表达式 r"\\" vitian_str='D:\python' # 如果希望字符串中 ' 可以正常运行,需要加上转移字符 \ print(vitian_str) # => 输出结果: D: python vitian_str= r'D:\python' # \n 被解析成了换行,如果想要屏蔽这种现象,使用 r print(vitian_str) # => D:\python import re vitian_str='你好我是vitian,欢迎来到我的博客' pattern = r'vitian' # search 范例 ret = re.search(pattern,vitian_str) if ret: print(ret.group(0)) # => vitian # print(ret) # => <re.Match object; sapn=(4,10), match='vitian'> # re.match 范例 ret = re.match(pattern,vitian_str) if ret: print(ret.group(0)) # => vitian # re.match 和 re.search 方法都是一次最多返回一个匹配对象,如果希望返回多个值,可以通过在 pattern 里加括号构造匹配组返回多个字符串。 # re.findall 函数范例 # 该函数用于搜索字符串,以列表格式返回全部匹配到的字符串 ret = re.findall(pattern,vitian_str) # findall 范例 if ret: print(ret.group(0)) # => vitian # re.split 函数范例 # re.split(pattern, string, maxsplit=0, flags=0) # 函数进行分割的时候,如果正则表达式匹配到的字符恰好在字符串开头或者结尾,返回分割后的字符串列表首尾都多了空格,需要手动去除 import re vitian_str='你好1我是vitian1,1欢迎来到我的博客1' pattern = r'\d' ret = re.split(pattern, vitian_str) print(ret) # => ['','你好','我是vitian',',','欢迎来到我的博客',''] # re.finditer 函数 # re.finditer(pattern,string,flags=0) # 搜索字符串,并返回一个匹配结果的迭代器,每个迭代元素都是 match 对象。 # re.sub 函数范例 # re.sub(pattern,repl,string,count=0,flags=0) # 在一个字符串中替换被正则表达式匹配到的字符串,返回替换后的字符串 repl 参数是替换匹配字符串的字符串,count 参数是匹配的最大替换次数。 import re vitian_str='你好我是vitian,欢迎来到我的博客' pattern = r'vitian' ret = re.sub(pattern, "小王子", my_str) print(ret) # => 你好我是小王子,欢迎来到我的博客
JSON(全名:JavaScript Object Notation 对象表示法)是一种轻量级的文本数据交换格式,JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。
{key1:value1, key2:value2,} # 键值对形式(用冒号分开),对间用逗号连接
作用: 使用JSON字符串生成python对象(load);
数据类型转换: 将数据从Python转换到json格式;
使用方法:
json.dumps(obj) # 将python数据类型转换为json格式的字符串。
json.dump(obj, fp) # 将python数据类型转换并保存到son格式的文件内。
json.loads(s) # 将json格式的字符串转换为python的类型。
json.load(fp) # 从json格式的文件中读取数据并转换为python的类型。
区别:
不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的
# 新建一个python1.xml文件:
<note date="23/04/2022">
<to>anna</to>
<from>vitian</from>
<msg>love</msg>
</note>
# 转换代码实现 import jsonimport xmltodictdef xml\_to\_json(xml_str): """parse是的xml解析器,参数需要 :param xml_str: xml字符串 :return: json字符串 """ xml_parse = xmltodict.parse(xml_str) # json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。 # dumps()方法的ident=1,格式化json json_str = json.dumps(xml_parse, indent=1) return json_str XML\_PATH = './python1.xml' # xml文件的路径with open(XML\_PATH, 'r') as f: xmlfile = f.read() with open(XML\_PATH[:-3] + 'json', 'w') as newfile: newfile.write(xml\_to\_json(xmlfile)) # => 输出结果 { "note": { "@date": "20220801", "to": "anna", "from": "vitian", "msg": "love" } }
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
“20220801”,
“to”: “anna”,
“from”: “vitian”,
“msg”: “love”
}
}
### 19.5 JSON文件转换为XML文件 [外链图片转存中...(img-JqtuOhFL-1715344762507)] [外链图片转存中...(img-pnFoWh5c-1715344762507)] **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。