Python 轻松学会写程式笔记-第5节62-写入档案

本文介绍了一个简易的Python记账程序,演示如何通过用户输入收集商品名称和价格,并将其保存为CSV格式的文件。文章详细讲解了程序代码的每一部分,包括使用字串加法和乘法进行数据合并,以及如何利用with语句正确打开和关闭文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最终程序

products = []
while True:
	name = input('请输入商品名称:')
	if name == 'q':
		break
	price = input('请输入商品价格:')
	products.append([name, price])
print(products)

for p in products:
	print(p[0], '的价格是', p[1])

with open('products.csv', 'w') as f:
	for p in products:
		f.write(p[0] + ',' + p[1] + '\n')

在这里插入图片描述

字串可以做加法+跟乘法*

我们要把使用者输入的商品名称跟价格存到电脑的档案
这样我们才真正做到一种储存的功能 才叫做一个记帐程式

好 之前有教过档案读取
在这之前我先很简单讲一个额外的东西
就是字串可以做加跟乘

'abc' + '123' = 'abc123'
'abc' * 3 = 'abcabcabc'

例如说abc加上123
如果我用加法把两个字串合併在一起
它就会变成abc123
它就只是把字串合併而已

那乘法可能出乎你意料
很夸张 字串竟然可以用乘法
abc乘3就变abcabcabc
好 那加法跟乘法
这就是字串可以做的
它不能做减法和除法

反正你只要稍微知道 字串可以做合并就好了

基本上不太可能会用到这个乘法

几乎没有用过这个东西

那加法是还满常用的
字串的合并

写到档案的程序

直接把写到电脑档案的程式码写出来

with open('products.txt', 'w') as f:
	for p in products:
		f.write(p[0] + ',' + p[1] + '\n')

写到档案真正的程式码 就是用f.write
那我先写入商品名称p0
用加法去做字串合併
逗点
再跟商品价格p1 商品价格做合併
最后再加上一个分行 倒斜线n是分行的意思 换行的意思

⚠️==\n外面要套单引号==

解释

第1行

open就是打开电脑档案,那我们现在要打开的是这个 products.txt档
电脑原先有没有这个档案不重要,就算也没关係,它会覆盖掉它
那没有也没关係,因为我们现在是写入模式 如果没有这个档案,我们就会产生这个档案
因为我们现在是写入模式 write

那之前读取档案的时候
我们这边是写r 是read读取
现在是写入是write w

read(r)读取模式
write(w)写入模式

好 那最外面这个as f有没有 就是当作f
我只需要用f 我就可以称呼这个档案了 我所open的这个档案 它只是一个简称而已

第2行

用一个for loop来一个一个存取我们目前清单中的商品 每一个商品都是一个小清单
那小清单中的0的位置就是名称
小清单中的1的位置就是价格

第3行

加法做字串的合併
商品名称之后我跟逗点做合併,之后我再跟价格做合併,之后我再跟分行做合併
所以这4个字串合併在一起 会变成一个字串
这4个 每一个都字串str
那4个字串 字串加字串加字串加字串 它就会合成一个大字串
在这里插入图片描述
那我把这个大的字串丢给f write这个功能

这是我们第一次看到
⚠️write的这个功能
它就只是一个档案可以执行的功能

f是一个档案 我们open的档案
我们针对一个我们open的档案
我们可以做write的动作
就是写入的动作

提点

这3行写到档案的程式码
第一行最关键的是这个open 打开档案的意思
那第三行这边f.write 才是真正的写入

什么叫真正的写入?
如果我只有open 我没有f.write 根本就没有写到档案
open只是打开而已
我们一定要写f.write 才可以真正的开始写入

这边我有用一个for loop 所以我执行很多次f.write
我用一个for loop 来把商品一个一个写进去

执行

执行看看 会不会真的成功的写到电脑档案
先到这个资料夹裡面确定一下 真的没有products.txt档 只有我们的程式档products.py跟readme(readme就github专案的那个说明档)

我们现在准备要产生这个档案
如果这个档案已经存在也没关係 它会重写一次 它会覆盖掉它

执行这个程式
ramen 拉麵 220
pasta 280
q

你有看到吗 products.txt 产生出来了
在这里插入图片描述
在这边
好 我们打开来看看
在这里插入图片描述
这就是我们的资料
商品名称跟逗点合併 跟价格合併 再跟一个换行合併
然后迴圈的第二回 写第二个商品了
商品名称再跟逗点合併再跟价格合併 然后再跟换行合併

所以这个for loop这边走了2迴 2个迴圈 因为我们只有2个商品 所以这个f.write执行了2次

我们的程式才用3行的程式码就做到了这个功能:把使用者输入的资料存到电脑裡面
你看python有多厉害 在做这种数据处理的方面非常的简洁 没有任何一个字是多写的

改成存csv格式

with open('products.csv', 'w') as f:

我们把这个点txt的副档名
改成点csv

因为
csv 是电脑的一种 满常用来储存资料的一种档案格式
尤其针对我们这种 每一个商品有很多种属性的时候

名称 价格
有不同属性的时候我们就会用csv来储存资料的
所以你如果去政府的网站或是气象局下载他们的历史资料的时候 通常你下载下来的格式 你都会满常看到这种cvs档的
而且它可以用excel打开

存档

再执行

产生了csv档在这边 你看
在这里插入图片描述
你有没有看到它可以用excel打开
它的那个图案图示
好 用excel打开
在这里插入图片描述
很棒
拉麵 220 pasta 280
可以装在不同的格子裡

csv档
通常我们都是用逗点做区隔

所以如果我这边没有跟逗点合併 直接把商品的名称跟价格併在一起的话 那这样就全部都变同一格了
这样就没有那个分隔了

我再写一次给你看
好 你看它全部都在同一格了 塞在一起 不好看
在这里插入图片描述
这是为什么我刚刚会用逗点做区隔
我在每一个属性的中间用逗点做合併 虽然我们现在只有2种属性 就名称跟价格

最后这个换行是一定要的
每一次我们用f.write 通常最后我们都会跟换行做合併
那这样写成的档案才可以换行

with 解释联系

这个with是什么意思 现在帮你複习一下
在程式语言裡面几乎都是这样子
你一个档案如果你有open
你就要有close

你有open就要有close 所以你一旦open的档案 你要记得close

因为很多人会忘记 而且很麻烦
这是为什么python
设计了一个with的功能
来帮你自动close

你的程式码只要一离开with 走到17行 就是离开with了
它就帮你把档案close了
因为它知道你已经不再使用到这个档案了 它就帮你把档案关闭 你就不能再写入了
在这里插入图片描述
为什么走到17行是离开with
因为我们现在的15行16行都在with的裡面
我们这边都有空格 我们都空格之后才开始写 表示它在with的裡面
我证明给你看它在with的裡面 你看Sublime这边 行数旁边有小箭头
我点这个小箭头可以收敛
收敛 展开
你有没有看到15行16行真的是属于with旗下的
在这里插入图片描述
所以你如果走到17行 我写f.write
那不行 它会说 你已经不能再写入了 我已经把f关掉了 这个products.csv档我已经给它close了 你怎么还想要写入

所以这个with就是帮你自动close的意思
我们所有需要写入的程式码 都要写在它裡面
所以这就是为什么我们的f.write会写在with架构的裡面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值