写入本地数据
- python txt文件读写(追加、覆盖)
- 1、文件的打开和创建
- 2、文件的读取
- 3、文件的写入
- (1)在lucky.txt中新增内容(覆盖:每次运行都会重新写入内容)
- (2) 在lucky.txt中追加内容(追加:之前在txt中的内容不改变,继续在已存在的内容后新增内容)
- 4、文件的关闭
- 5、一些报错
- (1)encodin格式出错
- (2)没有写入本地
python txt文件读写(追加、覆盖)
1、文件的打开和创建
f = open('/tmp/test.txt')
f.read()
print(f.read())
'hello python!\nhello world!\n'
2、文件的读取
步骤:打开——读取——关闭
f = open('/tmp/test.txt')
f.read()
'hello python!\nhello world!\n'
f.close()
3、文件的写入
步骤:打开 – 写入 – (保存)关闭
直接的写入数据是不行的,因为默认打开的是’r’ 只读模式
>>> f.write('hello boy')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: File not open for writing
>>> f
<open file '/tmp/test.txt', mode 'r' at 0x7fe550a49d20>
应该先指定可写的模式:如(1)中示例
>>> f1 = open('/tmp/test.txt','w')
>>> f1.write('hello boy!')
使用了上面的代码之后,打开test.txt中并没有数据,并且原先的数据也没有了,因为此时数据只写到了缓存中,并未保存到文件,并且因为我们使用了覆盖的符识,所以原先里面的配置被清空了。
关闭这个文件即可将缓存中的数据写入到文件中
>>> f1.close()
[root@node1 ~]# cat /tmp/test.txt
[root@node1 ~]# hello boy!
注意:这一步需要相当慎重,因为如果编辑的文件存在的话,这一步操作会先清空这个文件再重新写入。那么如果不要清空文件再写入该如何做呢?
使用r+ 模式不会先清空,但是会替换掉原先的文件,如下面的例子:hello boy! 被替换成hello aay!
>>> f2 = open('/tmp/test.txt','r+')
>>> f2.write('\nhello aa!')
>>> f2.close()
[root@node1 python]# cat /tmp/test.txt
hello aay!
如何实现不替换?
>>> f2 = open('/tmp/test.txt','r+')
>>> f2.read()
'hello girl!'
>>> f2.write('\nhello boy!')
>>> f2.close()
[root@node1 python]# cat /tmp/test.txt
hello girl!
hello boy!
可以看到,如果在写之前先读取一下文件,再进行写入,则写入的数据会添加到文件末尾而不会替换掉原先的文件。这是因为指针引起的,r+ 模式的指针默认是在文件的开头,如果直接写入,则会覆盖源文件,通过read() 读取文件后,指针会移到文件的末尾,再写入数据就不会有问题了。这里也可以使用a 模式:如(2)中示例
>>> f = open('/tmp/test.txt','a')
>>> f.write('\nhello man!')
>>> f.close()
>>>
[root@node1 python]# cat /tmp/test.txt
hello girl!
hello boy!
hello man!
(1)在lucky.txt中新增内容(覆盖:每次运行都会重新写入内容)
f = "lucky.txt"
a =8
with open(f,"w") as file: #”w"代表着每次运行都覆盖内容
for i in range(a):
file.write(str(i) + "d" + " "+"\n")
a +=1
输出结果:
(2) 在lucky.txt中追加内容(追加:之前在txt中的内容不改变,继续在已存在的内容后新增内容)
f = "lucky.txt"
a =8
with open(f,"a") as file: #只需要将之前的”w"改为“a"即可,代表追加内容
for i in range(a):
file.write(str(i) + "d" + " "+"\n")
a +=1
输出结果:
总结:根据开始的表格,根据需要,更改open文件时的方式即可。
4、文件的关闭
file_handle.close()
5、一些报错
(1)encodin格式出错
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 1425: illegal multibyte sequence
我使用成功的解决方法:加入**encoding=‘utf-8’**即可
open(path,'r',encoding='utf-8')
(2)没有写入本地
使用了写入的代码之后,打开test.txt中并没有数据,并且原先的数据也没有了,因为此时数据只写到了缓存中,并未保存到文件,并且因为我们使用了覆盖的符识,所以原先里面的配置被清空了。
解决方法:
f.close()
关闭这个文件即可将缓存中的数据写入到文件中