写入文件
保存数据的最简单的方式之一是将其写入到文件中。这样数据就可以长久的保存了。
1.写入到空文件
要将文本写入到文件,在调用open()时需要提供另一个实参,实参是在告诉python要写入打开的文件。看一段具体的代码:
write_message.py
filename = 'programming.txt'
"""
养成一个很好的习惯就是,尽量把文件的名字,保存在一个变量里面,
这样在修改文件名字的时候,也非常的方便,只需修改一处就可以了,
不然到处找要修改的文件名字,可能会有遗漏掉
"""
with open(filename, 'w') as file_object:
"""写入文件"""
file_object.write("I love programming.")
with open(filename, 'r') as f:
"""读出文件"""
lines = f.read()
print(lines)
output:
I love programming.
打开文件时,可指定读取文件模式(‘r’) 、写入文件模式(‘w’) 、附加模式(‘a’) 或让你能够读取和写入文件的模式(‘r+’) , 在使用写入(‘w’)模式打开文件时一定要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。
注意:Python只能将字符串写入到文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式
2.写入多行
函数write()不会在你写入的文本末尾添加换行符,因此如果你写入多行时没有指定换行符,文件看起来可能不是你希望的那样:
filename = 'programming.txt'
"""
养成一个很好的习惯就是,尽量把文件的名字,保存在一个变量里面,
这样在修改文件名字的时候,也非常的方便,只需修改一处就可以了,
不然到处找要修改的文件名字,可能会有遗漏掉
"""
with open(filename, 'w') as file_object:
"""写入文件"""
file_object.write("I love programming.")
file_object.write("I love creating new games.")
with open(filename, 'r') as f:
"""读出文件"""
lines = f.read()
print(lines)
output:
I love programming.I love creating new games.
看打开文件后也是一样的,连接在了一起:
那怎么解决这个现象呢?我们接下来就看看怎么解决:
filename = 'programming.txt'
"""
养成一个很好的习惯就是,尽量把文件的名字,保存在一个变量里面,
这样在修改文件名字的时候,也非常的方便,只需修改一处就可以了,
不然到处找要修改的文件名字,可能会有遗漏掉
"""
with open(filename, 'w') as file_object:
"""
写入文件,
在写入的每行后面,加一个换行符,当然也可以添加制表符,空行等等,根据需求。
"""
file_object.write("I love programming.\n")
file_object.write("I love creating new games.\n")
with open(filename, 'r') as f:
"""读出文件"""
lines = f.read()
print(lines)
output:
I love programming.
I love creating new games.
看只是文件中也是换行的
3.附加到文件
如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式打开文件,python在返回文件对象前不会清空文件,当然返回之后也不会清空文件,而写入到文件里面的内容是添加到文件末尾;如果指定的文件不存在,python将会创建一个空文件。
下面就以附加的模式打开文件:
filename = 'programming.txt'
"""
养成一个很好的习惯就是,尽量把文件的名字,保存在一个变量里面,
这样在修改文件名字的时候,也非常的方便,只需修改一处就可以了,
不然到处找要修改的文件名字,可能会有遗漏掉
"""
with open(filename, 'a') as file_object:
"""
写入文件,
在写入的每行后面,加一个换行符,当然也可以添加制表符等等,根据需求。
"""
file_object.write("I alse love finding meaning in large datasets.\n")
file_object.write("I love creating apps that can run in a browser.\n")
with open(filename, 'r') as f:
"""读出文件"""
lines = f.read()
print(lines)
output:
I love programming.
I love creating new games.
I alse love finding meaning in large datasets.
I love creating apps that can run in a browser.
我们打开文件看看内容如何:
练习:
Q:Write a program that prompts the user for their name. When they respond, write their name to a file called guest.txt.
A:
filename = 'guest.txt'
with open(filename, 'a') as f:
while True:
name = input("What's your name? ")
if name == 'q':
break
f.write(name + '\n')
What's your name? eric
What's your name? bob
What's your name? aaron
What's your name? smile
What's your name? denis
What's your name? q
看看文件内容:
还可以。
改进一下:
filename = 'guest.txt'
with open(filename, 'a') as f:
while True:
name = input("What's your name? ")
if name == 'q':
break
print(name + " wellcome to party.")
f.write(name + '\n')
What's your name? dada
dada wellcome to party.
What's your name? taoge
taoge wellcome to party.
What's your name? eric
eric wellcome to party.
What's your name? q
练习:
Q:
Write a while loop that asks people why they like programming. Each time someone enters a reason, add their reason to a file that stores all the responses.
A:
filename = 'programming_poll.txt'
responses = []
while True:
response = input("\nWhy do you like programming? ")
responses.append(response)
continue_poll = input("Would you like to let someone else respond? (y/n) ")
if continue_poll != 'y':
break
with open(filename, 'a') as f:
for response in responses:
f.write(response + "\n")
Why do you like programming? Programmers can build almost anything they can imagine.
Would you like to let someone else respond? (y/n) y
Why do you like programming? It's really fun, and really satisfying.
Would you like to let someone else respond? (y/n) y
Why do you like programming? It just never gets old.
Would you like to let someone else respond? (y/n) n