python怎么读取txt⽂件内容-Python读写txt⽂本⽂件的操作⽅
法全解析
⼀、⽂件的打开和创建
>>> f = open('/')
>>> f.read()
'hello python! hello world! '
>>> f
⼆、⽂件的读取步骤:打开 -- 读取 -- 关闭
>>> f = open('/')
>>> f.read()
'hello python! hello world! '
>>> f.close()
读取数据是后期数据处理的必要步骤。.txt是⼴泛使⽤的数据⽂件格式。⼀些.csv, .xlsx等⽂件可以转换为.txt ⽂件进⾏读取。我常使⽤的是Python⾃带的I/O接⼝,将数据读取进来存放在list中,然后再⽤numpy科学计算包将list的数据转换为array格式,从⽽可以像MATLAB⼀样进⾏科学计算。
下⾯是⼀段常⽤的读取txt⽂件代码,可以⽤在⼤多数的txt⽂件读取中
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⽂件
经过读取后,在Enthought Canopy的variable window查看读⼊的数据, 左侧为pos,右侧为Efield。
三、⽂件写⼊(慎重,⼩⼼别清空原本的⽂件)步骤:打开 -- 写⼊ -- (保存)关闭
直接的写⼊数据是不⾏的,因为默认打开的是'r' 只读模式
>>> f.write('hello boy')
Traceback (most recent call last):
File "", line 1, in
IOError: File not open for writing
>>> f
应该先指定可写的模式
>>> f1 = open('/','w')
>>> f1.write('hello boy!')
但此时数据只写到了缓存中,并未保存到⽂件,⽽且从下⾯的输出可以看到,原先⾥⾯的配置被清空了
[root@node1 ~]# cat /
[root@node1 ~]#
关闭这个⽂件即可将缓存中的数据写⼊到⽂件中
>>> f1.close()
[root@node1 ~]# cat /
[root@node1 ~]# hello boy!
注意:这⼀步需要相当慎重,因为如果编辑的⽂件存在的话,这⼀步操作会先清空这个⽂件再重新写⼊。那么如果不要清空⽂件再写⼊该如何做呢?
使⽤r+ 模式不会先清空,但是会替换掉原先的⽂件,如下⾯的例⼦:hello boy! 被替换成hello aay!
>>> f2 = open('/','r+')
>>> f2.write(' hello aa!')
>>> f2.close()
[root@node1 python]# cat /
hello aay!
如何实现不替换?
>>> f2 = open('/','r+')
>>> f2.read()
'hello girl!'
>>> f2.write(' hello boy!')
>>> f2.close()
[root@node1 python]# cat /
hello girl!
hello boy!
可以看到,如果在写之前先读取⼀下⽂件,再进⾏写⼊,则写⼊的数据会添加到⽂件末尾⽽不会替换掉原先的⽂件。这是因为指针引起的,r+ 模式的指针默认是在⽂件的开头,如果直接写⼊,则会覆盖源⽂件,通过read() 读取⽂件后,指针会移到⽂件的末尾,再写⼊数据就不会有问题了。这⾥也可以使⽤a 模式
>>> f = open('/','a')
>>> f.write(' hello man!')
>>> f.close()
>>>
[root@node1 python]# cat /
hello girl!
hello boy!
hello man!
关于其他模式的介绍,见下表:
⽂件对象的⽅法:
⽅法⼀:
>>> f = open('/')
>>> f.readline()
'hello girl! '
>>> f.readline()
'hello boy! '
>>> f.readline()
'hello man!'
>>> f.readline()
''
⽅法⼆:
>>> for i in open('/'):
... print i
.
..
hello girl!
hello boy!
hello man!
>>> f = open('/')
>>> f.readlines()
['hello girl! ', 'hello boy! ', 'hello man!']
>>> f.close()
<() 逐⾏读取数据,和f.readline() 相似,唯⼀不同的是,f.readline() 读取到最后如果没有数据会返回空,⽽f.next() 没读取到数据则会报错
writelines()方法将什么写入文件>>> f = open('/')
>>> f.readlines()
['hello girl! ', 'hello boy! ', 'hello man!']
>>> f.close()
>>>
>>> f = open('/')
>>> f.next()
'hello girl! '
>>> f.next()
'hello boy! '
>>> f.next()
'hello man!'
>>> f.next()
Traceback (most recent call last):
File "", line 1, in
StopIteration
f.writelines() 多⾏写⼊
>>> l = [' hello dear!',' hello son!',' hello baby! ']
>>> 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(偏移量,选项)
>>> f = open('/','r+')
>>> f.readline()
'hello girl! '
>>> f.readline()
'hello boy! '
>>> f.readline()
'hello man! '
>>> f.readline()
' '
>>> f.close()
>>> f = open('/','r+')
>>> f.read()
'hello girl! hello boy! hello man! '
>>> f.readline()
''
>>> f.close()
这个例⼦可以充分的解释前⾯使⽤r+这个模式的时候,为什么需要执⾏f.read()之后才能正常插⼊f.seek(偏移量,选项)
(1)选项=0,表⽰将⽂件指针指向从⽂件头部到"偏移量”字节处
(2)选项=1,表⽰将⽂件指针指向从⽂件的当前位置,向后移动"偏移量”字节
(3)选项=2,表⽰将⽂件指针指向从⽂件的尾部,向前移动"偏移量”字节
偏移量:正数表⽰向右偏移,负数表⽰向左偏移
>>> f = open('/','r+')
>>> f.seek(0,2)
>>> f.readline()
''
>>> f.seek(0,0)
>>> f.readline()
'hello girl! '
>>> f.readline()
'hello boy! '
>>> f.readline()
'hello man! '
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论