电脑中所有的档案和目录(资料夹)形成一个树状的结构
一个目录下可以有多个目录和档案,所有的档案和目录由根目录为起点开始分支
路径是电脑中用来表示档案或目录位置的方法,有两种表示法:
C:\
, D:\ ...
),Linux / macOS 的根目录是 /
C:\Users\<使用者名称>\Desktop
dog.jpg
的绝对路径是 C:\Users\<使用这者名称>\Desktop\dog.jpg
cats
是 C:\Users\<使用者名称>\Desktop\cats
a.txt
,和一个资料夹 pictures
,资料夹中有三张图片, dog.jpg
, cat.jpg
, apple.png
,那对桌面这个目录来说:
a.txt
对於桌面的相对路径是 a.txt
,pictures
对於桌面的相对路径是 pictures
pictures
中相片对於桌面的相对路径是 pictures\dog.jpg
, pictures\cat.jpg
和 pictures\apple.png
在 Windows,路径中的目录以反斜线 \
分隔,Linux / macOS 以斜线 /
分隔
变数的数值在程序结束後就会不见,若要将程序执行的结果储存起来供下次执行时使用,必须将要储存的资料存在档案中
Python 中档案读写的功能可以处理各类型的档案,但纯文字类型的处理比较简单,所以这篇只会介绍文字档案读写
用 open(name, mode)
开起档名是 name
的档案,可以用相对路径或绝对路径表示,参数 mode
是档案开启的模式,以字串表示,常用的有:
'r'
: 唯读,只能读取其中的资料'r+'
: 读写,可以读取并写入资料,新写入的内容会在档案的开头w
: 写入,如果档案不存在会建立新档案,如果档案存在原先的内容会被删除'a'
: 写入,如果档案不存在会建立新档案,如果档案存在不会删除原先的内容,新的内容会加在档案的最後开启和程序码档案同个资料夹中的 data.txt
档案使用完要用 close()
将档案关闭以档案损毁
f = open('data.txt', 'r')
f.close()
或是
with open('data.txt', 'r') as f:
被开启的档案会在使用完後自动关闭
回传一个字串,包含档案中的所有内容
先在同个资料夹中建立 data.txt
,内容是
Hello, world!!!
Today is the 10th day.
用 read()
读取其中的内容
f = open('data.txt', 'r')
contain = f.read()
print(contain)
f.close()
或
with open('data.txt', 'r') as f:
contain = f.read()
print(contain)
可以指定指读取前几个字
with open('data.txt', 'r') as f:
contain = f.read(5)
print(contain)
回传一个字串,是档案的第一行(包含换行符号)
with open('data.txt', 'r') as f:
contain = f.readline()
print(contain)
回传一个串列,里面的一个元是档案中的一行
with open('data.txt', 'r') as f:
contain = f.readlines()
print(contain)
可以只读取前几行
with open('data.txt', 'r') as f:
contain = f.readlines(1)
print(contain)
用 write()
可以把字串写入档案中
如果档案开启的模式是 r+
,会从档案的开头开始写入,原先的内容会被覆盖
如果再用 read()
读取内容,会发现前面几个字被删除
with open('data.txt', 'r+') as f:
f.write('123')
contain = f.read()
print(contain)
但实际上档案的前三个字已经变成123,让档案关闭後再读取一次,才能看到写入的内容
with open('data.txt', 'r+') as f:
f.write('123')
with open('data.txt', 'r') as f:
print(f.read())
如果用 w
模式开启,原先的内容会先被清空
with open('data.txt', 'w') as f:
f.write('123')
with open('data.txt', 'r') as f:
print(f.read())
如果要写入的档案不存在时会新增档案,所以可以搭配回圈大量且自动的产生档案
for i in range(1, 6):
f = open('data_'+str(i)+'.txt', 'w')
f.close()
如果用 a
模式开启,原先的内容会保留
with open('data.txt', 'a') as f:
f.write('123')
with open('data.txt', 'r') as f:
print(f.read())
因为只能写入和读取字串,所以储存数值时要先把资料转换成字串
,读取数值时需要把字串转成其他型态
从档案中读取数值,经过计算後再把数值存回档案中
with open('data.txt', 'r') as file:
value=file.read()
value=int(value)
value+=10
value**=2
with open('data.txt', 'w') as file:
file.write(str(value))
如果档案中一行只有一个数值,可以用 readlines()
读取数值,储存时用回圈将数值一笔一笔写入,因为写入资料时不会自动换行,所以还需要写入一个 '\n'
with open('data.txt', 'r') as file:
values=file.readlines()
for i in range(len(values)):
values[i]=int(values[i])
with open('data.txt', 'w') as file:
for value in values:
file.write(str(value))
file.write('\n')
一行中有多个数值,每个数值用空格或其他符号分隔,可以用字串的 split()
分割字串
如果 data.txt
长这样
123 23 456 3 45
那读取和写入时可以写成
with open('data.txt', 'r') as file:
values=file.read()
values = values.split()
for i in range(len(values)):
values[i]=int(values[i])
with open('data.txt', 'w') as file:
for value in values:
file.write(str(value))
file.write(' ')
>>: 【Day 11】- 还在 PTT 点击已满 18 岁? 带上 cookies 吧!(实战 PTT 爬虫 1/3)
还记得之前我装了个相机吗? 当初很害怕地把它组装上去,就怕插错或是折到排线,以至於他不能正常动作 那...
星期天上午,小明接到主管的电话,说他寄了一封重要的email到小明的信箱。小明赶忙开手机收信,哇!?...
引言 昨天使用到 strings 与 grep 这两个工具, 主要是用来寻找一堆资料中的字串的。 ...
Firebase 提供了两种资料库供我们做使用,分别是 Realtime Database、Clou...
本系列文章同步发布於笔者网站 上篇介绍了 Linux Bridge with Provider Ne...