最终程序
# 读取档案
data = []
with open('food.txt', 'r') as f:
for line in f:
data.append(line.strip())
print(data)
写一个文件来给读取
我们先在桌面建立一个资料夹 叫做read 就是读取的意思
我现在只是为了要做一个档案 来让我们的程式读取而已 这样我们等一下才有东西可以读嘛
这个资料夹现在是空的
我们先到Sublime这边呢 来写一个档案
裡面装著pasta 就是义大利麵 跟ramen 也就是拉麵
那我存档
那这两个都是食物嘛 食物的话就叫food好了
food.txt
.txt就是文字档的意思
存档
读取档案的程序
那我们准备可以开始写我们的这个程式码 来读这个档案了
with open('food.txt', 'r') as f:
for line in f:
好 我就直接先写出来了
with open
那我们要读的档案是food.txt
那我给它一个r
字串 as f 冒号
for line in f 冒号
原则上呢只要你们要读取档案
你们就要很快的写出这两行
它是一个比较语法的东西 要背起来
解释
open就是很明显嘛 打开档案嘛
那 当然要给一个档名啊 food.txt 这没问题
逗点之后 有一个r
这个r是什么东西 如果让大家猜 大家应该也猜得出来
read
读取模式的意思
那有读取模式 就有写入模式
write
他们分别的代号是
r跟w
读取模式跟写入模式
现在因为我们要读取档案 所以我用r 读取模式
那最后这个as f是什么意思
这个是最难理解的
as在英文上啊
就是当作
当作f
这是我取的
我可以写别的东西
可是我通常都取成f 就file 档案的意思
当作f
就是file 档案的意思
当作是一种简称
所以 我前面打开了一个档案
写得很複杂
打开了这个档案之后呢
在程式码裡面
我把这个档案
当作f
那么只要我们的程式码裡面
要用到这个档案
我就只要写f就好了
例如这边 我有用到这个档案 我就写f就好
因为 我们已经先写了当作f 写法就是as f
我把这个档案当作f
从此以后
我只要需要用到这个档案的部分
我就写成f就好了
它只是一种简称
好 那with这行解决之后
我写了一个for loop for迴圈
我们要用for迴圈来读取档案
读取f这个档案
我把档案当作了f
所以for line in f
每一行
我取名为line
这是我自己取的 你可以取别的
它档案一行一行的读嘛 每一行我把它取名叫做line
所以我用一个for loop来 一行一行的读这个档案
那 我就把每一行印出来好了
print(line)
print line
我把它读到的每一行
给印到萤幕上来
存档
执行
好 执行
印出pasta跟ramen
对比
我们打开一下我的档案 裡面有pasta跟ramen
可是你这样比对一下 怎么长得不太一样
左边我们印到cmd
怎么多了一个空行
原因是因为我们当时在写这个food档的时候 你记不记得我们有按enter换行
我们偷偷按了enter换行
那每一次我按enter啊
其实记事本呢就存了一个符号
换行的符号进去这个档案
来记录你在这个地方换行
那个换行的符号就是倒斜线n
\n=换行符号
所以呢当我们读取档案的时候
有读到那个换行的符号表示要换行
然后print本身又会换行
所以变成说
print本身会换行
line的结尾又有换行符号 导致换行
就 换行 换行
所以就变成说pasta这边换行
这边又换行
多了一个空行
我怎么证明给你看
把读到的资料装进清单
在with的上面 我写一个data的空清单
那每一行呢 我把它加进data裡面 append进去
我把line 档案中的每一行 append进去data清单裡面
那读取完这个档案呢 我就把data印出来
看看这个清单到底装了什么
执行
存档
好 执行
pasta这边存了换行符号
倒斜线n 这个就是换行符号
ramen这边为什么没有 因为我当时写完ramen 我没有再换行了
我只有pasta这个地方我有换行而已 ramen这个结尾我没有按enter 所以就没有
我们要怎么
strip()去掉换行符号
这是一个重点
我们通常不想要读取换行符号 进来我们的资料裡面
data.append(line.strip())
在line这边呢 写.strip
.strip
strip这个功能就是把
换行符号去掉
跟多馀的空格
如果那一行的前后有多馀的空格 它也会去掉
结尾如果有倒斜线n 换行的符号 它也会去掉
这就是strip的功能
那strip是一个只能对字串做的功能
line是一个字串嘛 所以它才可以写.strip
如果今天line是整数 那当然不能.strip啊
就仿彿好像 .append 只能对清单做一样
data是清单嘛 所以它才可以写.append
line是字串嘛 所以它才可以写.strip 来进行这个除掉换行符号的功能
好 所以我们现在就是先对line 做strip的功能
把换行符号去掉之后 我们才装进data清单
执行
好 存档
再执行一次
应该不会有换行符号囉 因为我们加了那个.strip
成功 倒斜线n不见了
你看上面 原本有倒斜线n 换行符号 现在没有了 就是因为我们加了这个.strip的功能
这个功能还蛮常用的 尤其是在档案读取的部分 几乎永远都会用这个功能 每一行都会把换行符号去掉 我们才会把资料收集起来
好 那最后我稍微跟你解释一下
这个with到底是什么
这个稍微有一点进阶一点 你听听就好
open是打开档案嘛
那过去在写程式裡面 我们一个程式要去打开档案 你可以想像我们的程式去电脑裡面
夹住那个档案 就是open的部分 夹住 这个程式被它佔用了 那我们读取完我们要的资料之后呢 我们就要close 鬆开那个夹子 别人才可以用
那过去很多人会觉得 写这个close很麻烦 或是忘记 你忘记 如果你的程式遇到一些错误啊 导致中断 那这个档案可能会损毁等等 别的程式用不了 因为那个夹子卡住 会有这种问题
那Python呢 因为是一个比较简化的程式语言
那Python就设计了这个with Python独有的功能 来让它自动close
with=自动close
只要我们的程式码 离开with的架构 譬如说走到第八行这边 这个档案就自动close了
所以它是一个自动close的功能 这个with
什么叫做离开with的架构
你有没有看到 第五行跟第六行 这两行在with的裡面嘛 它都空进去嘛
所以只有在这裡面的部分 这个档案是打开的状态
那如果我一离开 我走到第七行 我离开了这个with 就 档案就close 自动close
走到第八行的时候
这个f这个档案 我们把这个档案当作f
f在第八行的时候 已经是close的状态了 关掉
我在这边已经不能做档案读取了