接下来将会聊聊如何使用 Python 做到一些档案处理的部分,例如:新增档案、写入资料到特定档案内等方式。
Python 本身有支援档案处理相关的函式,而档案处理可以做到哪些事情呢?举例一个情境好了。
假设今天我们写了一只爬虫,然後去爬了特定网站(可能是 IT 邦帮忙),爬完之後你需要将资料储存下来,那麽你就会需要使用到建立档案与写入档案等等的行为。
所以档案处理的相关知识就变得不能不了解罗~
那你可能会问说 JavaScript 可不可以做到类似档案处理的部分呢?正常来讲是不行的,除非...你使用的是 Node.js。
如果是使用 Node.js 的话,通常会使用 fs
(File System) 模组来达到读取与写入等档案操作的行为,例如:
var fs = require('fs');
fs.open('filename.txt', 'r+', function() {
console.log('档案已开启。')
})
而这边并不着墨於 Node.js 的档案存取部分,所以接下来会直接快速介绍 Python 的档案模组部分,以便我们後面的学习唷~
这边记得一件事情,只要跟 Python 档案相关的操作,起手式是绝对闪不掉用 open()
函式,而 open()
很顾名思义就只是打开什麽东西的意思,所以这边要注意 open()
只是要打开某个档案的行为而已唷。
打开档案之前要先注意到 open()
函式是一个表达式,所以会需要一个变数储存,最主要原因是我们当我们打开了一个档案之後,如果你不储存的话,那你接下来要怎麽操作?
所以这边要切记,当你呼叫了 open()
函式之後要记得用一个变数储存,那麽 open()
主要是带入两个参数:
f = open('filename', 'mode')
filename
mode
档案名称的部分只需要注意要加上副档名,其他比较需要注意的是 mode
的部分,依据你传入的参数不同就会得到不同结果,所以这边就简单列一下基本的 mode
参数:
参数 | 说明 |
---|---|
r | 以唯读的方式开启档案 |
w | 清除档案内容後再写入 |
a | 开启档案後从档案结尾写入 |
这边比较需要注意的是 open()
的意思就是「开启档案」,然後是用什麽方式处理。
那麽我们可以先尝试撰写以下程序码并尝试执行:
f = open('filename.txt', 'r')
基本上你有很高机会遇到以下错误讯息:
FileNotFoundError: [Errno 2] No such file or directory: 'filename.txt'
因为这个档案不存在所以才会发生该问题,这时候你可以自己建立一个 filename.txt
档案,然後内容填写以下:
Hello Python
当你再次执行 Python 时,就不会出现任何错误,但是你可能会想说怎麽没有输出内容呢?就如同前面所讲的,目前只是打开这个档案,并没有读取,所以如果想要呈现内容的话就必须使用 read()
函式来读取:
f = open('filename.txt', 'r')
read = f.read()
print(read)
这样子就可以读取出内容罗~
484 超直觉呢?
这时候你可能会想说,你希望 filename.txt 这个档案是自动生成的,而不是我们手动生成,这时候你是可以尝试换另一种模式:
f = open('filename.txt', 'w')
或者是
f = open('filename.txt', 'a')
这两种模式都可以达到「当档案不存在时,就自动建立档案」。
那麽这两种模式有何差异呢?
w
模式下,如果档案不存在就会新增档案这一点没问题,但是如果这个档案存在的话,就会先清除档案内容,这一点要特别注意一下。
而 a
模式则是会在开启之後,从尾行开始写入,这什麽意思呢?让我们往後面练习会更清楚。
那麽前面尝试了开启档案并读取档案内容的行为,接下来就是关於写入档案的部分,否则你只打开跟读取不写入很怪吧?
不管怎麽样,前面我们有讲过只要跟档案操作相关的行为就必定会有一个 open()
函式,所以前面就会有一个 open()
函式的起手式,前面也有讲到依据你开启档案所传入的参数模式的不同,而写入方式就会跟着不同,那麽这是什麽意思呢?首先我们先看一下刚刚前面的范例程序码:
f = open('filename.txt', 'r')
read = f.read()
print(read)
这一段程序码执行之後结果就如同刚刚的图片所示:
那麽我们期望打开档案後写入文字该怎麽做呢?
首先我们先假设我们想写入两段文字,分别是:「我是 Ray」、「部落格网址是 https://hsiangfeng.github.io/」这两段文字,这时候就会使用到 write
的函式,但是在使用 write
之前有几点注意事项要注意:
a
或是 w
模式如果你用 r
模式去开启并尝试写入的话就会出现这一段错误讯息:
io.UnsupportedOperation: not writable
反之,如果你是在读取模式尝试写入则会得到另一个错误讯息:
io.UnsupportedOperation: not readable
所以这边就先尝试使用 a
模式撰写。
a
模式的特色就是开启档案後当你有写入行为时,就会以档案内容结尾处开始写入,举例来讲,我目前 filename.txt 的内容如下:
Hello Python
那麽当我执行以下程序码後:
f = open('filename.txt', 'a')
f.write('我是 Ray')
f.write('部落格网址是 https://hsiangfeng.github.io/')
f.close()
你再去打开 filename.txt 会得到以下结果:
如果你期望的是断行的话,只需要在程序码尾端补上换行符号 \n
即可:
f = open('filename.txt', 'a')
f.write('我是 Ray\n')
f.write('部落格网址是 https://hsiangfeng.github.io/')
f.close()
回头讲讲 w
模式,w
模式简单来讲就是会先清除档案内容才开始写入。
举例来讲,目前的 filename.txt 内容如下:
Hello Python
我是 Ray
部落格网址是 https://hsiangfeng.github.io/
当我执行以下程序码後,就会变了:
f = open('filename.txt', 'w')
f.write('我是 Ray\n')
f.write('部落格网址是 https://hsiangfeng.github.io/')
f.close()
以我自己来讲,我是比较常使用 a
模式就是了,毕竟 w
模式会先将内容清空後再写入,如果没有把这两种模式搞清楚的话,你可能会发生为什麽档案一直被清空的状况。
最後我想补充一个东西,叫做追加模式,上面我们聊了许多档案处理相关的方式,其中也包含了写法与运作说明,那麽其实 open
函式的开启 mode 还有其他模式可以使用,而这些模式称之为「追加模式」。
使用的方式非常的简单,只需要加上一个 +
号就可以改变原有的模式。
举例来讲,前面我们有讲到 r
代表的是唯读开启,因此无法写入,但是当你使用了追加模式 r+
,那麽此时就会变成读写皆可的状态,意指同时可以写入与读取档案。
什麽意思呢?这边简单举例一个范例:
f = open('filename.txt', 'r+')
f.write('我是 Ray\n')
f.write('部落格网址是 https://hsiangfeng.github.io/')
f.close()
这一段程序码是可以正常执行并不会出现 io.UnsupportedOperation: not writable
的。
而其他的 w
与 a
模式也可以使用 +
号追加模式,但实际上我测试下来 w+
与 a+
并没有太大差异,毕竟一个依然是清除档案内容在写入与在档案结尾写入,实际上比较有差异的就是 r
模式,所以就不再额外补充罗。
那追加模式的使用时机并没有绝对,还是要看需求为主哩。
今天狗狗状况整个大翻转,一觉醒来开始会耍白目,虽然有点烦,但是这样子才是牠应该要有的样子。
>>: Day4 Let's ODOO: Model(1) Class & Attribute
大家好我是乌木白,今天要和大家介绍的是 AJAX,AJAX 是我在学习 JavaScript 这门...
缘由: APP开发使用Webview也是很常见的,有些功能常用但难度不高,有些功能则需要与网页端配合...
html的form标签之input小记录 前言本篇是上课中所提及好用,但是笔者小新手之前未发现的上课...
Setter 与 Setter Getter: 取得特定值的方法 Setter: 存值的方法 Get...
新增 Discord Application 到 Discord Developers Applic...