写入本地数据

  • python txt文件读写(追加、覆盖)
  • 1、文件的打开和创建
  • 2、文件的读取
  • 3、文件的写入
  • (1)在lucky.txt中新增内容(覆盖:每次运行都会重新写入内容)
  • (2) 在lucky.txt中追加内容(追加:之前在txt中的内容不改变,继续在已存在的内容后新增内容)
  • 4、文件的关闭
  • 5、一些报错
  • (1)encodin格式出错
  • (2)没有写入本地

python txt文件读写(追加、覆盖)

Python 结果保存到文本 python保存数据到本地文件_数据


Python 结果保存到文本 python保存数据到本地文件_python_02

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

输出结果:

Python 结果保存到文本 python保存数据到本地文件_缓存_03

(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

输出结果:

Python 结果保存到文本 python保存数据到本地文件_python_04


总结:根据开始的表格,根据需要,更改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()

关闭这个文件即可将缓存中的数据写入到文件中