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 ~]#
writelines()方法将什么写入文件关闭这个⽂件即可将缓存中的数据写⼊到⽂件中
>>> 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() 没读取到数据则会报错
>>> 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小时内删除。
发表评论