Python文件和异常之写文件

写入文件

保存数据的最简单的方式之一是将其写入到文件中。这样数据就可以长久的保存了。

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值