Python学习5

2、瑞丽-伯纳德对流的拉格朗日拟序结构(FTLE场结果对比) 在中,我简单比较了瑞丽伯纳德对流的FTLE场,但是因为粒子追踪采用的是欧拉方法,所以精度不是很高, 因此与文献中的结果还是有些差别。下面放一张文献中的FTLE场,参数与上篇文章是一致的,Ra = 1e8;Pr = 1;本文将详细的介绍如何得到这样的图片,好吧,其实也不是很详细。总之,先展示以下我个人的结果。可以看出,上图基本上与文献是一致的,因为这里展示的是瞬时场,所以当然不可能是完全一致,至于提取的LCS结构,我在下面也会提及。本着详细介绍的原则,所以这里我很良心的从流场计算开始介绍。 阅读详情

1.文件读写

(1)读文件
使用open()传入文件和标识符:

f = open('D:/Workspace/PycharmProjects/test/beread.txt', 'r')//标识符'r'表示读

//如果文件不存在,就会抛出IOError错误,如果打开成功,就可以用read()方法一次把文件的全部内容读到内存
f.read()

//最后需要调用close()关闭文件
f.close()

如果文件读写过程中产生IOError,后面的f.close()就不会调用,文件就无法关闭,解决这个问题的第一种方法是使用try...finally:

try:
    f = open('/path/to/file', 'r')
    print f.read()
finally:
    if f:
        f.close()

这么写比较繁琐,所以Python引入了with语句来自动调用close方法:

with open('/path/to/file', 'r') as f:
     print f.read()

read()方法会一次性读取文件的全部内容,文件比较小时,这种读取方法最方便;如果不能确定文件大小,反复调用read(size)比较保险,size表示每次最多读取size个字节的内容;如果是配置文件,调用readlines()最方便:

for line in f.readlines():
    print(line.strip()) //去掉末尾的'ln'

(2)file-like Object
像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。

(3)读取二进制文件&非ASCII编码文件
前面讲的默认都是读取文本文件,并且是ASCII编码的文本文件。要读取二进制文件,比如图片,视频等等,要用标识符'rb'打开:

open('D:/Workspace/PycharmProjects/test/beread.jpg', 'rb')

如果要读非ASCII编码的文件,就必须以二进制模式打开,再解码。比如GBK编码的文件:

f = open('D:/Workspace/PycharmProjects/test/gbk.txt', 'rb')
u = f.read().decode('gbk')

这样子手动装换太麻烦,Python提供了一个codecs模块来在读文件时自动转换编码,直接读出unicode:

import codecs
with codecs.open('D:/Workspace/PycharmProjects/test/gbk.txt', 'r', 'gbk') as f:
    f.read()

(4)写文件
使用write()函数,方法和读文件类似,只是标识符要改为'w'或者'wb'

with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')

2.操作文件和目录
Python内置的os模块可以直接调用操作系统提供的接口函数。操作文件和睦的函数一部分放在os模块中,一部分放在os.path模块中:

os.path.abspath('.') //查看当前目录的绝对路径
D:\Workspace\PycharmProjects\test

#在该目录下创建一个新目录
#首先把新目录的完整路径表示出来
os.path.join('D:\Workspace\PycharmProjects\test', 'newcreate')
#然后创建一个新的目录:
os.mkdir('D:\Workspace\PycharmProjects\test\newcreate')
#删掉一个目录
os.rmdir('D:\Workspace\PycharmProjects\test\newcreate')

把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join(),这样可以正确处理不同操作系统的分隔符,拆分时也是同样道理,要用os.path.split(),拆分后的后一部分总是最后级别的目录或文件名

os.path.split('D:\Workspace\PycharmProjects\test\newcreate')

('D:\Workspace\PycharmProjects\test','newcreate')

os.path.splitext()可以直接得到文件扩展名

os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')

对当前目录下文件的操作:

os.rename('beread.txt', 'newname.py')//文件重命名

os.remove('beread.jpg')//删除文件

但是os模块中没有复制文件的函数,但在shutil模块中提供了copyfile()的函数,传入两个参数,第一个是被复制文件的名字,第二个是新文件的名字。

os.listdir('.')  # 列出当前目录的所有文件和子目录
os.path.isdir(x)  # 判断x是否为目录
os.path.isfile(x)  # 判断x是否为文件
os.walk('.') # 遍历当前目录的所有文件和子目录和子目录的文件,返回值去pycharn里面看

文件操作的一些方法:https://www.cnblogs.com/tkinter/p/5631213.html

3.序列化
①Python提供cPickle和pickle两个模块来实现序列化,两个模块功能一样,只是前者是用c语言写的,速度快,所以导入的时候先尝试导入前者:

try:
    import cPickle as pickle
except ImportError:
    import pickle


d = dict(name = 'Bob', age = 20, score = 88)
pickle.dumps(d)

pickle.dumps()方法把任意对象序列化成一个str,然后就可以把这个str写入文件,或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:

f = open('dump.txt', 'wb')
pickle.dum(d, f)
f.close()

#反序列化
f = open('dump.txt', 'rb')
d = pickle.load(f)
f.close()
print d
{'age': 20, 'score': 88, 'name': 'Bob'}

②JSON
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
Python的json模块提供了转换方法:

import json
d = dict(name='Bob', age=20, score=88)
json.dumps(d) # dumps()方法返回一个内容为JSON标准的str

f = open('jsondump.txt', 'wb')
json.dump(d, f) # dump()方法把d转化为JSON后写入一个file-like Object.
f.close()

JSON同样有loads()和load()的方法来进行反序列化,loads()把JSON类型的字符串反序列化,load()从file-like Object读取字符串并且反序列化,需要注意的是反序列化得到的所有字符串对象默认都是unicode而不是str:

import json
f = open('dump.txt', 'rb')
d = json.load(f)
f.close()
print d
{u'age': 20, u'score': 88, u'name': u'Bob'}

③JSON进阶

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

s = Student('Bob', 20, 88)
print(json.dumps(s))

当直接用dumps(d)序列化一个class对象d时会报错,因为class对象不是一个可序列化为JSON的对象,不过dumps()方法还有很多可选参数,可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要为类对象写一个转换函数,再把函数传入:

def change(std):
    return {
    'name': std.name
    'age': std.age
    'score': std.score
    }

print(json.dumps(s, default = change))

另一种方法是通过class实例的__dict__属性,它就是一个dict,用来存储实例变量。也有少数例外,比如定义了__slots__的class。

print(json.dumps(s, default=lambda obj: obj.__dict__))

反序列化的时候,同样要写一个函数传入loads()的object_hook,把dict对象转化了类的实例:

def changeback(d):
    return Student(d['name'], d['age'], d['score'])

json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook = changeback))

4.正则表达式

①单子字符匹配
\d匹配一个数字,\w匹配一个字母或者数字,.匹配任意字符,\s匹配空格

②变长字符匹配
*表示任意个字符,包括0,
+表示至少一个字符,
?表示0个或者一个字符,
用{n}表示n个字符,
用{m,n}表示m到n个字符

③'-'这样的特殊字符要用'\'转义

④进阶:
要做更精确的匹配,可以用[]表示范围,比如:
[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;

[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000‘等等;

[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'。

^表示行的开头,^\d表示必须以数字开头。

$表示行的结束,\d$表示必须以数字结束。

⑤re模块
Python提供re模块,包含所有正则表达式的功能,匹配使尽量使用r'',这样就不需要转义:

import re
print re.match(r'\d{3}\s\-\s\d{3,8}', '010 - 12345')
<_sre.SRE_Match object at 0x0266EC28>
print re.match(r'\d{3}\-\d{3,8}', '010 - 12345')
None

如果match()匹配成功,则返回一个Match对象,否则返回None

⑥切分字符串
用re.split(s)切分字符串比普通的`s.split(’ ‘)功能更强大,就算有连续的空格或者其他符号,都能切分出来:

re.split(r'[\s\,\;]+', 'a,b;; c  d')
['a', 'b', 'c', 'd']

⑦分组
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组,比如^(\d{3})-(\d{3,8}$)就定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:

m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print m.group(0) # group(0)永远是原始字符串
'010-12345'

print m.group(1), m.group(2) # group(1), group(2), ....表示第1、2、...个子串
'010' '12345'

print m.groups() # 打印出所有子串
('010', '12345')

⑧贪婪匹配
正则匹配默认是贪婪匹配,会尽可能多的匹配字符:

re.match(r'^(\d+)(0*)', '102300').groups()
('102300', '')

由于\d+采用贪婪匹配,所以会把整个字符串全部匹配掉,所以后面的0*只能匹配空字符串,要想\d+采用非贪婪匹配,在其后面加个?就可以:

re.match(r'^(\d+?)(0*)', '102300').groups()
('1023', '00')

⑨编译
当我们在Python中使用正则表达式时,re模块内部会干两件事情:

1.编译正则表达式,如果正则表达式的字符串本身不合法,会报错;

2.用编译后的正则表达式去匹配字符串。

如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:

import re
re_pre = re.compile(r'^(\d{3})-(\d{3,8})$') #预编译
re_pre.match('010-12345').groups()
('010', '12345')
5、自动化代码结构与运维系统的优化 本文探讨了自动化代码结构与运维系统的优化方法,涵盖审批流程的模块化设计、日志记录与工单系统的集成、通知方式的选择、错误处理的策略以及持续改进的实践。同时,深入分析了运维盲目性问题,通过故障案例揭示了关键指标缺失和日志未充分利用的弊端,提出了开发与运维角色转变的必要性。文章还介绍了如何生成有用的系统指标、建立良好的日志习惯以及实施日志聚合,以提升系统的可观测性和可靠性。最终通过总结和流程图展示了优化措施的核心要点,为构建高效、可靠的运维体系提供了指导。 阅读详情

相关推荐

非root用户如何在CentOS7集群上编译安装OpenFOAM6

本文详细介绍了在CentOS7集群上以非root用户身份编译安装OpenFOAM6的完整流程。通过环境准备、依赖包离线获取、源码编译安装等步骤,解决了集群环境下权限和依赖问题,特别针对OpenMPI和Boost库提供了优化配置建议,帮助用户高效完成安装并优化性能。

weixin_28826961的博客 681

python-----------异常处理和模块引用

异常处理 ''' 异常 ''' try: print("-----------开始-----------------") a = 100/0 print(a) except ValueError as e: print("错误信息:",e) except ZeroDivisionError as e: print("错误信息:", e) except Exception as e: print("错误信息:",e) else: print("错误信

NumOneDD的博客 9152

ARTIX-7 GTP 3G-SDI 工程构建与调试实战

本文详细介绍了基于ARTIX-7 FPGA和GTP收发器的3G-SDI工程构建与调试实战。从基础概念解析到Vivado工程创建、GTP IP核配置、SDI IP核集成,再到系统集成与时钟域处理,提供了全面的技术指导。文章还分享了调试技巧、常见问题排查方法以及性能验证步骤,帮助开发者快速掌握3G-SDI视频传输技术的实现与优化。

weixin_30443813的博客 256

5python循环

range函数的使用 作为循环遍历的对象 第一种创建方式 r=range(10) print(r)#range(0,10) print(list(r)) 默认从零开始,默认步长为1 range(0, 10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 第二种创建方式 指定了初始值1,到10结束,不包含10,默认步长为1 '''第二种创建方式,给了两个参数(小括号中给了两个数)''' r=range(1,10) print(list(r)) [1, 2, 3, 4, 5, 6,.

qq_51082388的博客 1051

烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变智能电视的折腾记录

本文详细记录了烽火HG680-LC机顶盒刷机后的使用体验,通过安装当贝纯净桌面和讯飞语音助手,老盒子焕发新生,实现无广告、快速响应的智能电视功能。文章对比了刷机前后的性能差异,分享了影音播放、语音控制等实用功能,并提供了ADB调试和问题解决的实用技巧,帮助用户将闲置的运营商盒子变身为高性能的智能影音中心。

weixin_30292843的博客 471

西门子AI面试问答(STAR法则回答实例)

通过建立良好的沟通渠道、倡导透明和积极的沟通,并建立信任和共享目标的文化,我成功地改善了团队合作的氛围和效果。对于一些存在分歧和冲突的情况,我采用了积极的解决问题的态度,促进双方的沟通和理解,寻找共同的利益点和解决方案。我的成果得到了评委和观众的认可,并为我的学术发展和进一步的科学研究奠定了基础。首先,我主动与团队成员进行一对一的沟通,倾听他们的观点和意见,了解他们在合作中遇到的问题和需求。我还参加了学校组织的科学俱乐部和研究小组,与其他热衷科学的同学一起进行讨论和实验,加深我的理解和实践技能。

kashine的博客 7249

Python之文件操作

# 补充:# strip() 返回数据类型为字符串# strip()去除头和尾的指定字符;# 如果没有指定,默认去掉头和尾的空格 str_1 = " he llo " # he lloprint(str_1.strip())str_2 = ",,,,,,,he,l,lo,,,,,,," # 返回 he,l,loprint(str_...

a18563862293的博客 116

Nacos启动报错No DataSource set?5分钟搞定standalone模式配置

本文针对Nacos启动时常见的“No DataSource set”报错,深入解析了其根源在于默认集群模式与外部数据库依赖。提供了两种快速解决方案:通过命令行参数“-m standalone”启动,或直接修改启动脚本配置文件,从而在5分钟内以单机模式成功启动Nacos,无需配置MySQL数据库。

weixin_29234509的博客 465

python file.readlines无法循环

def showfile2 (filepath): startTime=datetime.datetime.now() f=file(filepath) while True: flag=True lines=f.readlines(10000) failure=0 for line

u010565244的专栏 2223

第1.2章 机器人SLAM计算机基础总结(二):VSCode教程及 AI等效率插件推荐

如何高效编写代码?怎样快速调试程序?**别担心,今天就给大家带来一款超强大的编程神器 ——VSCode,以及能让编程之路 “一马平川” 的实用插件推荐,无论你是新手小白还是资深大神,都能从中受益!

行知SLAM 1862

ThingsBoard-阿里云短信规则节点

由于Thingsboard平台国内只支持短信服务,那我们运维人员去及时接收邮箱肯定是没有短信来的方便的,在这基础上,需要自己从规则链入手,自定义一个支持阿里云短信服务的规则节点。

weixin_67440240的博客 2094

Python学习手册第5版PDF源代码学习思考

Python学习手册第5版PDF源代码学习思考

Python单行客的博客 2844

2026年1至9月武汉市房地产价格深度分析报告

本报告基于2026年1月至9月武汉市实际成交案例,从成交价格、区域分布、户型结构、价格走势等维度进行深度分析。数据来源包括武汉市住房保障和房屋管理局备案数据、主要中介机构成交记录及典型楼盘网签案例,覆盖全市15个行政区及主要功能板块。

王国平的博客 328

Python学习手册第5版PDF,真的太适合初学者入门学习了!

Python 绝对是一门易学难精的语言,打着简单语法的旗号把我忽悠过来,最后发现它背后隐藏了许多复杂的实现。

DEVELOPERAA的博客 5054

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【python】Pyqt5制作一个英文学习词典

运用Python语言编写程序制作英文学习词典,词典有4个基本功能:添加、查询、删除和退出。程序读取源文件路径下的txt格式词典文件,若没有就创建一个。词典文件存储方式为“英文单词 中文单词”,每行仅有一对中英释义。程序会根据用户的选择进入相应的功能模块,并显示相应的操作提示。当添加的单词已存在时,显示“该单词已添加到字典库”;当查询的单词不存在时,显示“字典库中未找到这个单词”;但需要删除某个单词...

Jason的技术探索与分享 5669

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【python中的PyQT5学习记录】

记录一下 python中的PyQT5学习的过程中的参考过的资料

MITA1的博客 968

Python3.5 学习十六

Python3.5 学习十六 转载于:https://www.cnblogs.com/HU-HU/p/9527820.html

weixin_30389003的博客 73

[python3.5]学习网址推荐

https://pypi.python.org/pypi python官网,可搜索下载python各种模块http://www.lfd.uci.edu/~gohlke/pythonlibs/ 可根据python版本下载python lib库模块http://blog.youkuaiyun.com/a359680405/article/category/2799089 很厉害的博客,学习python3+py

时九博客 1471

Python3.5 学习十三

Python3.5 学习十三 转载于:https://www.cnblogs.com/HU-HU/p/9527803.html

weixin_30740295的博客 73

Python 学习日记 day5

【代码】Python 学习日记 day4。

heard_222532的博客 175

Python基于深度学习yolov5的扑克牌识别

标题:扑克牌识别 语言:Python 算法:嵌套Yolov5 框架:Pytorch 主要依赖库:OpenCV-Python、Numpy等

cheng2333333的博客 6293

【免费下载】 学习Python 第5版(影印版) PDF 资源下载

学习Python 第5版(影印版) PDF 资源下载 【下载地址】学习Python第5版影印版PDF资源下载分享 学习Python 第5版(影印版) PDF 资源下载 项目地址: https://gitcode.com/Open-...

gitblog_06686的博客 2144

好用的python学习软件_5种好用的Python工具!Python学习分析

学习Python的过程中,各种各样的工具必不可少,它可以极大的提高编程效率,今天小编为大家介绍5种好用的Python工具,希望对你有所帮助。1、Python Tutor是由Philip Guo开发的一个免费教育工具,可以帮助学生攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程,通过这个工具,大家可以直接在 Web 浏览器中编写Python 代码,并逐步可视化地运行程序。2、I...

weixin_39614675的博客 568

今天给大家分享5个Python学习网站!非常非常非常好用!

五个网站包你学会Python

m0_72660525的博客 4777

分享5个免费的Python学习网站,抓紧收藏吧~

于是,趁着空闲的时间在各大网站上面梳理了一下,找出了5个比较好的学习网站,并且都是免费的,比较适合初学者了解一些基础语法、解决BUG问题。我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。1、Python 官方中文网站。

Python栈_基的博客 1181

【亲测免费】 掌握Python编程的终极指南:《学习Python 第5版(影印版)》PDF资源推荐

掌握Python编程的终极指南:《学习Python 第5版(影印版)》PDF资源推荐 【下载地址】学习Python第5版影印版PDF资源下载分享 学习Python 第5版(影印版) PDF 资源下载 项目地址: https://g...

gitblog_06618的博客 614

Python3.5 学习十五

Python3.5 学习十五 转载于:https://www.cnblogs.com/HU-HU/p/9527812.html

weixin_30532837的博客 77
上一篇: Python学习4
下一篇: Python学习6
CodeMask
博客等级 码龄9年 2粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值