Python 轻松学会写程式笔记-第5节67-检查档案在不在

import os # operating system

# 读取档案
products = []
if os.path.isfile('products.csv'): # 检查档案在不在
	print('yeah!找到档案了!')
	with open('products.csv', 'r', encoding='utf-8') as f:
		for line in f:
			if '商品,价格' in line:
				continue # 继续
			name, price = line.strip().split(',')
			products.append([name, price])
	print(products)
else:
	print('找不到档案……')

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

# 印出所有购买记录
for p in products:
	print(p[0], '的价格是', p[1])

# 写入档案
with open('products.csv', 'w', encoding='utf-8') as f:
	f.write('商品,价格\n')
	for p in products:
		f.write(p[0] + ',' + str(p[1]) + '\n')

1、检查程序

记帐程式 最开始可以读取档案
他把现成的Products.csv档读进这个程式裡面之后呢
第二阶段我们再让使用者输入新的商品 看他这次新购买了甚么东西
第三阶段 两行程式码印出来目前所有的购买纪录
最后我们再写入更新版的档案 最新版的products.scv

想想看这个程式现在看似这个功能已经很完整了 他又可以读取 又可以增加 而且我们还可以写成csv档 他还可以用excel打开

有没有意识到 有一个小小潜在的风险
程式一开始一进来 就立刻读取档案 立刻读取products.csv

想想看如果电脑裡面没有这个档案 他会怎么样
Crash当掉
执行一次
结果:

(base) liuruideMacBook-Pro:coding liurui$ python3 66.py
Traceback (most recent call last):
  File "66.py", line 3, in <module>
    with open('products.csv', 'r', encoding='utf-8') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'products.csv'
(base) liuruideMacBook-Pro:coding liurui$ 

仔细看这个错误讯息
File not found就是找不到档案错误 Error就是错误
他后面就说没有这个档案products.csv

因为没有products.csv
所以我们就没办法读取

很显然的我们在写这种需要读取档案的程式的时候 应该要写一种功能 来检查这个档案在不在电脑裡面

import os(作业系统模组)

复习

之前我们在产生随机数字的时候
我们有import一个东西叫random随机
import这个字是载入的意思
电脑裡面有一个叫做标准函示库的 就是他裡面装好一大堆现成的书 我们可以import那些现成的书
如果你是想要import一些不在那个标准函示库裡面的东西 我们就要上网下载 下载来安装
random是因为他是python标准函示库裡面的东西 所以我们就不用下载

那今天我们要来检查档案在不在电脑裡面
需要一个载入作业系统
Import我们现在不是import random了

我们现在是import os
全名就是作业系统operating system

import os # operating system

我相信第一次学习写程式的人可能对到底甚么是作业系统没有很清楚
不是重点 稍微跟你讲一下就好了
我们都知道作业系统有像是windows7、XP、Windows8、Windows10、Mac嘛
那手机的作业系统有甚么 IOS嘛Android嘛
还有甚么Linex专门写程式的作业系统
其实作业系统有很多
我们都知道这些叫做作业系统

作业系统是干嘛的
只要了解说作业系统 他其实就像是电脑的政府
如果我明天要去包场中正纪念堂 我是不是要跟政府说申请 我明天要下午两点到四点我要包场 我要去做一些文献的察看 或是我要去那边拍电影
那我是不是要包起来 那我们要先去预约嘛

那检查档案在不在电脑裡面 这个也是"政府"在管的
档案对电脑来讲就有点像是政府旗下的建筑物 他盖在哪裡
他存在哪裡 电脑的不同地方
那只有政府知道整体的状况
这些街道长怎样 哪些档案多大啊
那你如果要去使用档案 譬如说读取 这个其实都是在政府的管辖范围内的
我们区区写的这个程式 是没有权限去检查哪个地址有没有档案
比如说c硬碟裡面的Users资料夹裡面有没有这个档案
我们是程式权力没有这么大 这些东西都是由政府在管的

所以我们就要先载入这个作业系统os
他是标准函示库裡面已经就有涵盖的东西 所以我们不用上网下载
那只要载入了os作业系统 我们就可以跟政府沟通了
我就可以请问政府大人说 这个地方有没有这个档案

使用os.path.isfile()来检查档案在不在

if os.path.isfile('products.csv'):
	print('yeah!找到档案了!')
else:
	print('找不到档案……')

解释

第1行

if os.path.isfile('products.csv'):

请问政府大人电脑裡面有没有这个档案
那我要给他一个档名嘛 我给他一个档名或是地址
那我现在给他一个档名就好了
因为我要检查这个档案有没有在我现在这个资料夹裡面
如果今天我要检查的这个档案不在不在我的资料夹裡面的话 譬如说他在c硬碟的某个其他的地方 或是别的资料夹裡面阿 那我们就要给他一个完整的地址 就是绝对路径
那我现在只给档名的话呢 就是相对路径
检查有没有在我现在这个程式档同样的路径底下(在它隔壁) 我们都在同一个资料夹裡面

可以去看那个延伸影片 补充教学的那个绝对路径跟相对路径的差别

那我现在只需要给一个档名就好了
请问政府大人 我的同样的资料夹裡面呢 有没有products.csv这个档案

第2~4行

	print('yeah!找到档案了!')
else:
	print('找不到档案……')

如果有我就印出Yeah 找到档案了
如果没有 如果这个档案不存在 “政府”跟你说没有 印出找不到档案

到底是怎么检查这个档案在不在的

os.path.isfile 是甚么意思?

OS是我们载入的这本书 从标准函示库裡面载入的 专有名词叫做模组

OS 这个模组裡面的(这个“点”就是“的”的意思)

path模组
作业系统的这个模组裡面有一个比较小的模组 叫做path路径 路径就是地址嘛

OS这本书裡面的路径的这个模组的isfile功能

那同一个模组裡面可以有很多个功能
模组就是一个python档的意思 它裡面可以写一堆功能 那isfile只是其中一个功能 检查档案在不在

这个除非用了很多很多次 才有可能直接背起来 不然的话 你如果使用到想要检查档案在不在 你再去查就好了 你不用把这个写到笔记本上面 千万不用 没有人这样学写程式的 不需要这样用硬背的 你只要要用的时候再去查就好了 只要查的到的东西都不用背 基本上是这种大原则

如果档案在的话 我就印出找到档案了
那找到档案以外我要干嘛 我要读取档案

所以我要把读取档案的这段程式码 我把他剪下来移过去
那移过去之后 我要把它往右空一个Tab 这个动作很重要喔 空格进去才可以进去if的裡面
只要选中这一段 然后点Tab 就能集体往右

在这里插入图片描述那如果有这个档案的话 我就印出yeah找到档案了 然后我开始进行读取嘛

我刚刚把读取档案的程式码移进来的时候 我留了一行在外面 Products 是空清单这行 我怎么没有放进来这边
为甚么?
其实我想放到程式码的最上面这边最开始

products = []
if os.path.isfile('products.csv'):
	print('yeah!找到档案了!')
	# 读取档案
	with open('products.csv', 'r', encoding='utf-8') as f:
		for line in f:
			if '商品,价格' in line:
				continue # 继续
			name, price = line.strip().split(',')
			products.append([name, price])
	print(products)
else:
	print('找不到档案……')

我放在if的外面 放在if的外面的话 他才可以不管这个档案存不存在 我都要做这行
因为等一下让使用者输入的时候 我们要用到products 写入档案的时候也有用到products
那我当然不管你刚开始有没有读取products.csv 我都要先做出这个空清单来装我们所有购买过的商品

总结

products = []
if os.path.isfile('products.csv'):
	print('yeah!找到档案了!')
	# 读取档案
	with open('products.csv', 'r', encoding='utf-8') as f:
		for line in f:
			if '商品,价格' in line:
				continue # 继续
			name, price = line.strip().split(',')
			products.append([name, price])
	print(products)
else:
	print('找不到档案……')

我们先产生这个products这个空清单 不管你有没有找到档案 我都要产生这个空清单 那因为等一下要用到

写一个if来检查档案在不在电脑裡 作业系统这个模组的path模组裡面的isfile功能
然后我给他一个档名 请问他这个档案在不在电脑裡

如果他变成true 就是在电脑裡 他说有找到了这个档案 那我就进这段
那我就先印出yeah找到档案了 然后我就执行一段程式码来读取他
好那如果他不是变成true呢 他是变成false的话 我们这个if这边就会跳到else这边 就会执行找不到档案

那我再强调一次
我们可以透过载入作业系统Operating system这个模组来进行他裡面的某一个功能叫做isfile 来检查档案在不在电脑裡
用意完全不是要叫你把这个背起来 只是说我们程式可以做到这个功能而已

执行

products.csv不是删了吗 没有这个档案
那我就期望我的程式要告诉我 找不到档案

(base) liuruideMacBook-Pro:coding liurui$ python3 67.py
找不到档案……
请输入商品名称:

很好

那我们就先输一个商品名称
让他整个产生那个csv档


(base) liuruideMacBook-Pro:coding liurui$ python3 67.py
找不到档案……
请输入商品名称:dimitri
请输入商品价格:250
请输入商品名称:ygc
请输入商品价格:13
请输入商品名称:q
[['dimitri', 250], ['ygc', 13]]
dimitri 的价格是 250
ygc 的价格是 13
(base) liuruideMacBook-Pro:coding liurui$ 

好产生了Products.csv对不对
你看这时候才产生出来
在这里插入图片描述
因为程序走到最下面这段写入档案 他会建立Products.csv嘛

好建立了之后
我如果再执行一次我的程式

(base) liuruideMacBook-Pro:coding liurui$ python3 67.py
yeah!找到档案了!
[['dimitri', '250'], ['ygc', '13']]

Yeah找到档案了
而且我们读取到了

那我们程式现在就很完善了 不但可以读取档案 还可以检查档案在不在 如果档案在我才读取
然后中间这段让使用者增加新的购买商品 印出所有购买纪录 最后呢写入档案
才30 40行欸 做了蛮多功能的了

建立版本上传GitHub

我们把这个最新版本上传到Github
Git add Products.py
Git commit
版本讯息我叫做add check file exist
上传
好上传完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python学习笔记》是由皮大庆编的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值