python括号匹配中的内容_python正则表达式中的括号匹配问
题
⼀、⽂件的打开和创建
12345
f = open('/')f.read()'hello python!nhello world!n'f
⼆、⽂件的读取步骤:打开 -- 读取 -- 关闭
1234
f = open('/')f.read()
'hello python!nhello world!n'
f.close()
读取数据是后期数据处理的必要步骤。.txt是⼴泛使⽤的数据⽂件格式。⼀些.csv, .xlsx等⽂件可以转换为.
txt ⽂件进⾏读取。我常使⽤的是Python⾃带的I/O接⼝,将数据读取进来存放在list中,然后再⽤numpy科学计算包将list的数据转换为array格式,从⽽可以像MATLAB⼀样进⾏科学计算。
下⾯是⼀段常⽤的读取txt⽂件代码,可以⽤在⼤多数的txt⽂件读取中
12345678910111213141516
filename = 'array_reflection_2D_TM_vertical_' # txt⽂件和当前脚本在同⼀⽬录下,所以不⽤写具体路径pos =
[]Efield = []with open(filename, 'r') as file_to_read: while True:
lines = file_adline() # 整⾏读取数据
if not lines:
break
pass
p_tmp, E_tmp = [float(i) for i in lines.split()] # 将整⾏数据分割处理,如果分割符是空格,括号⾥就不
⽤传⼊参数,如果是逗号, 则传⼊‘,'字符。
pos.append(p_tmp) # 添加新读取的数据
Efield.append(E_tmp)
pass
pos = np.array(pos) # 将数据从list类型转换为array类型。 Efield = np.array(Efield) pass
例如下⾯是将要读⼊的txt⽂件
2016626171647895.png (429×301)
经过读取后,在Enthought Canopy的variable window查看读⼊的数据, 左侧为pos,右侧为Efield。
2016626171713978.png (148×277)2016626171743777.png (147×280)
三、⽂件写⼊(慎重,⼩⼼别清空原本的⽂件)步骤:打开 -- 写⼊ -- (保存)关闭 直接的写⼊数据是不⾏的,因为默认打开的是'r' 只读模式
123456
f.write('hello boy')Traceback (most recent call last):
File "", line 1, in IOError: File not open for writing
f
应该先指定可写的模式
12
f1 = open('/','w')f1.write('hello boy!')
但此时数据只写到了缓存中,并未保存到⽂件,⽽且从下⾯的输出可以看到,原先⾥⾯的配置被清空了
12
[root@node1 ~]# cat /[root@node1 ~]#
关闭这个⽂件即可将缓存中的数据写⼊到⽂件中
123
f1.close()
[root@node1 ~]# cat /[root@node1 ~]# hello boy!
注意:这⼀步需要相当慎重,因为如果编辑的⽂件存在的话,这⼀步操作会先清空这个⽂件再重新写⼊。那么如果不要清空⽂件再写⼊该如何做呢? 使⽤r+ 模式不会先清空,但是会替换掉原先的⽂件,如下⾯的例⼦:hello boy! 被替换成hello aay!
12345
f2 = open('/','r+')f2.write('nhello aa!')f2.close()
[root@node1 python]# cat /hello aay!
如何实现不替换?
12345678
f2 = open('/','r+')f2.read()
'hello girl!'
f2.write('nhello boy!')f2.close()
[root@node1 python]# cat /hello girl!hello boy!
可以看到,如果在写之前先读取⼀下⽂件,再进⾏写⼊,则写⼊的数据会添加到⽂件末尾⽽不会替换掉原先的⽂件。这是因为指针引起的,r+ 模式的指针默认是在⽂件的开头,如果直接写⼊,则会覆盖源⽂件,通过read() 读取⽂件后,指针会移到⽂件的末尾,再写⼊数据就不会有问题了。这⾥也可以使⽤a 模式
f = open('/','a')f.write('nhello man!')f.close()
[root@node1 python]# cat /hello girl!hello boy!hello man!
关于其他模式的介绍,见下表:
2016626170852899.png (713×317)
⽂件对象的⽅法:f.readline() 逐⾏读取数据 ⽅法⼀:
123456789
f = open('/')f.readline()
'hello girl!n'
'hello boy!n'
writelines使用方法python'hello man!'
''
⽅法⼆:
123456789101112
for i in open('/'):
.
.. hello girl!hello boy!hello adlines() 将⽂件内容以列表的形式存放
f = open('/')f.readlines()
['hello girl!n', 'hello boy!n', 'hello man!']
f.close()
<() 逐⾏读取数据,和f.readline() 相似,唯⼀不同的是,f.readline() 读取到最后如果没有数据会返回空,⽽f.next() 没读取到数据则会报错
12345678910111213141516
f = open('/')f.readlines()
['hello girl!n', 'hello boy!n', 'hello man!']
f.close()
f = open('/')f.next()
'hello girl!n'
<()
<()
'hello man!'
<()
Traceback (most recent call last):File "", line 1, in StopIteration
f.writelines() 多⾏写⼊
1234567891011
l = ['nhello dear!','nhello son!','nhello baby!n']f = open('/','a')f.writelines(l)f.close()
[root@node1 python]# cat /hello girl!hello boy!hello man!hello dear!hello son!hello baby!
f.seek(偏移量,选项)
12345678910111213141516
f = open('/','r+')f.readline()
'hello girl!n'
'hello boy!n'
'hello man!n'
' '
f.close()f = open('/','r+')f.read()
'hello girl!nhello boy!nhello man!n'
''
f.close()
这个例⼦可以充分的解释前⾯使⽤r+这个模式的时候,为什么需要执⾏f.read()之后才能正常插⼊f.seek(偏移量,选项)(1)选项=0,表⽰将⽂件指针指向从⽂件头部到“偏移量”字节处 (2)选项=1,表⽰将⽂件指针指向从⽂件的当前位置,向后移动“偏移量”字节 (3)选项=2,表⽰将⽂件指针指向从⽂件的尾部,向前移动“偏移量”字节
偏移量:正数表⽰向右偏移,负数表⽰向左偏移
12345678910111213
f = open('/','r+')f.seek(0,adline()
''
f.seek(0,adline()
'hello boy!n'
'hello man!n'
''
f.flush() 将修改写⼊到⽂件中(⽆需关闭⽂件)
12
f.write('hello python!')f.flush()
1
[root@node1 python]# cat /
1234
hello girl!hello boy!hello man!hello python!
123456789
f = open('/')f.readline()
'hello girl!n'
12
'hello boy!n'
23
四、内容查和替换1、内容查实例:统计⽂件中hello个数 思路:打开⽂件,遍历⽂件内容,通过正则表达式匹配关键字,统计匹配个数。
1
[root@node1 ~]# cat /
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论