首页 > 编程语言 >【Python查漏补缺(二)】正则表达式与深浅拷贝

【Python查漏补缺(二)】正则表达式与深浅拷贝

时间:2023-06-08 23:03:09浏览次数:41  
标签:文件 查漏 打开 匹配 Python 补缺 print 拷贝 copy

 在开始正题之前讲一下打开文件的另一种方式。

之前打开文件的方式f = open("文件路径","文件打开方式", encoding="utf8")

模式描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

新的打开方式:with open("文件路径","文件打开方式", encoding="utf8") as f:

旧方式文件打开

Python提供了 with 语句的这种写法,既简单又安全,并且 with 语句执行完成以后自动调用关闭文件操作,即使出现异常也会自动调用关闭文件操作。

 # 1、以读的方式打开文件
f = open("1.txt", "r")
# 2、读取文件内容
f.write("hello world")  # 会报错,没有写权限
# 3、关闭文件
f.close()

安全写法:

try:
   # 1、以读的方式打开文件
   f = open("1.txt", "r")
   # 2、读取文件内容
   f.write("xxxxx")

except IOError as e:
   print("文件操作出错", e)

finally:
   # 3、关闭文件
   f.close()

with写法

# 1、以写的方式打开文件
with open("1.txt", "w") as f:
   # 2、读取文件内容
   f.write("hello world")

深拷贝和浅拷贝

(不可变类型有: 数字、字符串、元组)(可变类型有: 列表、字典、集合)

  • 浅拷贝使用copy.copy函数

  • 深拷贝使用copy.deepcopy函数

summary:

  • 浅拷贝

    • 不可变类型进行浅拷贝不会给拷贝的对象开辟新的内存空间,而只是拷贝了这个对象的引用

    • 对可变类型进行浅拷贝,会开辟新的内存空间.

    • 对可变类型的子集进行浅拷贝,只是拷贝了子集的引用

  • 深拷贝

    • 不可变类型和浅拷贝基本没有区别,都是拷贝对象的引用(但是元组里面如果有可变类型,深拷贝会开辟内存存储

import copy

# 对int数字类型进行浅拷贝,
a1 = 100
b1 = copy.copy(a1)
# 分别查看a1,b1变量的内存地址
print(id(a1))
print(id(b1))
# 结论:不可变类型进行浅拷贝不会给拷贝的对象开辟新的内存空间,而只是拷贝了这个对象的引用。

# 对可变类型进行浅拷贝
array1 = [1, 2, 3]
array2 = copy.copy(array1)  # 使用copy.copy()函数进行拷贝
print(id(array1))
print(id(array2))
# 对可变类型进行浅拷贝,会开辟新的内存空间.

# 对可变类型的子集进行浅拷贝比如列表里面嵌套列表
a2 = [1, 2, [2, 3]]
b2 = copy.copy(a2)

print(id(a2))
print(id(b2))
print(id(a2[2]))  # 内存值为970947576200
print(id(b2[2]))  # 内存值为970947576200
# 对可变类型的子集进行浅拷贝,只是拷贝了子集的引用

# ---------------------------- 深拷贝 ----------------------------
# 使用copy.deepcopy()
# 只要发现对象有可变类型就会对该对象到最后一个可变类型的每一层对象就行拷贝, 对每一层拷贝的对象都会开辟新的内存空间进行存储
a3 = 200
b3 = copy.deepcopy(a3)
print(id(a3))
print(id(b3))  # 不可变类型和浅拷贝基本没有区别,都是拷贝对象的引用(但是元组里面如果有可变类型,深拷贝会开辟内存存储

a4 = ['张三']
b4 = copy.deepcopy(a4)
print(id(a4))
print(id(b4))  # 对可变类型进行深拷贝和浅拷贝差不多,都是会开辟内存空间

正则表达式(Regular Expression)

match 和 group用法

import re

# 使用match方法进行匹配操作,match里面填写的是要匹配的字符串
result = re.match("000", "0009929032000")
# 如果匹配到数据的话,可以使用group方法来提取数据,如果没有匹配到数据会报错AttributeError: 'NoneType' object has no attribute 'group'
info = result.group(0)
print(info)

匹配单个字符

. 任意单个字符, [] 括号列举的字符, /d 数字 /D 非数字, /s 空白 /S 非空白, /w 非特殊字符(数字字母汉字下划线 /W 特殊字符

匹配多个字符

匹配前一个字符0到多次, + 匹配前一个字符1到多次, ? 匹配前一个字符0-1次(非贪婪匹配), {m} 匹配前一个字符m次,{m,n} 匹配前一个字符m到n次

浅析贪婪匹配和非贪婪匹配

不是很了解只能说,只知道?这个特殊字符是非贪婪匹配模式。而且正则貌似是从后的前匹配的。接下来有时间再好好整一下吧,最近有点忙。

Example

import re

line = "booooboby123"
regex_srt = ".*?(b.*?b).*"  # 这里原来是想要匹配boooob,但是由于贪婪匹配+从后到前导致匹配到bob
# 改为.*?(b.*b).* 发现可以匹配但结果为boooobob,后面的ob不是我想要的
# 改为.*?(b.*?b).* 最终可以匹配到boooob

match_obj = re.match(regex_srt, line)
if match_obj:
   print(match_obj.group(1))
 

标签:文件,查漏,打开,匹配,Python,补缺,print,拷贝,copy
From: https://www.cnblogs.com/liam-sliversucks/p/17467912.html

相关文章

  • 【Java查漏补缺(一)】数组与循环
    除了数组与循环,还有方法,讲究看吧!后续练习内容都是连贯的!BasicalJava看下Java中的变量类型吧!数据类型关键字内存占用二进制位数字节型byte1个字节4位短整型short2个字节8位整型int(常用)4个字节32位长整型long8个字节64位单精度浮点数float......
  • 【视频】Python的天气数据爬虫实时抓取采集和可视化展示
    全文链接:http://tecdat.cn/?p=32715原文出处:拓端数据部落公众号分析师:XiaoyangZhou本文以天气数据实时抓取和可视化展示为主题,旨在探讨如何使用Python编写程序来实现对天气数据的抓取、可视化和预测。从中国气象局天气预报网来获取数据首先,我们需要从中国气象局天气预报网上......
  • python爬虫——爬取网易云音乐评论内容
    一、选题背景  随着互联网的快速发展,网络上的评论文本资源急速增长。面对海量的网络资源信息,如何运用python爬虫技术爬取数据进行数据分析,挖掘评论文本中蕴含的丰富价值。二、大数据分析设计方案1.爬虫网站https://music.163.com/?from=wsdh#/song?id=2052441038 ......
  • 实验6turtle绘图与python库应用编程体验
    实验任务1test1实验代码fromturtleimport*defmove(x,y):penup()goto(x,y)pendown()defdraw(n,size=100):foriinrange(n):fd(size)left(360/n)defmain():pensize(2)pencolor('red')move(-200,0)......
  • Python取整及四舍五入
    向上取整:math.ceil()importmathmath.ceil(-0.9)>>>0math.ceil(0.3)>>>1向下取整:math.floor()、int()、//(整除)math.floor(-0.3)>>>-1int(0.9)>>>03//2#1.5>>>1虚假的四舍五入:round()""&quo......
  • 14dayPythonTask7-类与对象+魔法函数
    目录类与对象1.对象=属性+方法2.self是什么?3.Python的魔法方法4.公有和私有5.继承6.组合7.类、类对象和实例对象8.什么是绑定?9.一些相关的内置函数(BIF)练习题魔法方法1.基本的魔法方法2.算术运算符3.反算术运算符4.增量赋值运算符5.一元运算符6.属性访问7.描......
  • 【python】lambda
    lambdalambda是匿名函数,也就是没有名字的函数。lambda的语法非常简单:下面是一个lambda表达式的简单例子,我们可以把lambda表达式赋值给一个变量,然后通过这个变量来使用它:>>>my_sum=lambdax,y:x+y>>>my_sum(1,2)3lambda默认参数详解语法lambda[parameter_list,p......
  • python常用函数(zip,map,filter,reduce)
    一、zip它是Python的内建函数,(与序列有关的内建函数有:sorted()、reversed()、enumerate()、zip()),其中sorted()和zip()返回一个序列(列表)对象,reversed()、enumerate()返回一个迭代器(类似序列)>>>name=('jack','man','sony','pcky')>>>age=(2001,2003,2005,......
  • python 中输出匹配字符串及其下一行
     001、[root@PC1test05]#lsa.txttest.py[root@PC1test05]#cata.txt##测试数据3333gene9999kkkkgene77778888genegene00006666[root@PC1test05]#cattest.py##测试程序#!/usr/bin/envpython#-*-coding:utf-8-*-in_file=open("a.tx......
  • python - sqlite查询表名 列名
    最近在看到一个之前做的sqlite数据库时发现忘了table名叫什么了,所以找了找发现可以直接用python查询,记录一下importsqlite3conn=sqlite3.connect('test.db')cur=conn.cursor()sql="select*fromsqlite_masterwheretype='table'"cur.execute(sql)print(cur.fetcha......