9.1 Python 绝对路径与相对路径

第九章 文件的读写操作

9.1 Python 绝对路径与相对路径

9.1.1 准备工作

第1步:对照下图,新建文件和文件夹:

1.在桌面新建文件夹,命名为file。
2.在file文件夹中新建2个文件夹,分别命名为a_file, b_file。
3.在file文件夹中新建1个txt文件,命名为xxx.txt,在xxx.txt 文件中写入“好好学习,天天向上!!!”。
4.在a_file文件夹中新建1个txt文件,命名为aaa.txt,在aaa.txt 文件中写入“恭喜你,文件读取成功!!!”。
5.在b_file文件夹中新建c_file文件夹,在c_file文件夹新建一个ccc.txt文档,在文档中写入“今天星期六!!!”。
6.在b_file文件夹中新建1个txt文件,命名为bbb.txt,在bbb.txt 文件中写入“今天下雨了!!!”。
7.在b_file文件夹中新建1个b.py文件。

第2步:用vscode打开b_file文件夹。

注意
用相对路径只能打开b_file文件夹,否则后面的代码会报错!!!
但是用绝对路径打开文件时,可以不限制打开的文件夹。

9.1.2 绝对路径

1.什么是绝对路径

在Python读取文件时,我们首先需要知道文件的路径,即存储位置。
就像人工手动打开文件一样,首先你要知道文件存储在c盘或d盘的具体位置。

Python的文档路径有两种表述方式:
第1种是绝对路径:就是从盘符(c盘、d盘)开始一直到文件所在的具体位置。
绝对路径就是文件或文件夹在硬盘上的完整路径。
在 Windows 系统中,绝对路径是以磁盘名称开头,如 C:或者 D: ,具体的文件或文件夹名称做结尾。
例如:xxx.txt 文件的绝对路径为:
"C:\Users\xiaoyuzhou\Desktop\file\xxx.txt"
绝对路径是唯一的,只有一个。

2.查看绝对路径的方法有2种

方法1:点击文件上方的搜索栏;

方法2:鼠标点击文件xxx.txt,然后按住【shift】,再点击鼠标右键,最后点击【复制文件地址】。

3.用绝对路径打开文件
首先打开b.py 文件,在b.py 文件中输入下面的代码。
用绝对路径打开文件,可以不限制打开的文件夹。

# 用绝对路径打开xxx.txt   
txt = open (
"C:\\Users\\xiaoyuzhou\\Desktop\\file\\xxx.txt", 
encoding='utf-8') 
print(txt.read())

【终端输出】
好好学习,天天向上!!!

因为图片显示不全,所以代码里我有换行,大家编写时候不用换行。

4.代码解析
open 是一个Python的内置函数,作用是打开文件,函数里面有2个参数;
第1参数是文件的绝对路径:C:\Users\xiaoyuzhou\Desktop\file\xxx.txt";
第2参数是文件编码格式:encoding=‘utf-8’;

read 也是一个Python的内置函数,作用是读取整个文件,并将读取到的文件内容存放到一个字符串变量中。
open 函数后面会有详细的介绍,这里仅做了解。

5.注意事项:改写绝对路径时加一个\

xxx.txt 文件的的绝对路径原本为:
“C:\Users\xiaoyuzhou\Desktop\file\xxx.txt”

我在open 参数内的写的xxx.txt 文件的的绝对路径为:
“C:\\Users\\xiaoyuzhou\\Desktop\\file\\xxx.txt”

通过对比两个路径,发现我把绝对路径的单反斜杠统一写成了双反斜杠,然后放到参数中。
为什么要写成双反斜杠呢?
因为在Python中,有转义字符的语法,【\】+字母能实现特殊的功能。

上述代码中,如果不加双反斜杠,\f 就会被ptyhon当做转义符号处理,程序会报错,如下面的代码:

# 使用单反斜杠,\f 被当做转义字符,程序报错 
txt = open (
    "C:\Users\xiaoyuzhou\Desktop\file\xxx.txt" ,
    encoding='utf-8') 
print(txt.read())

【程序报错】

SyntaxError: (unicode error) 'unicodeescape' codec 
can't decode bytes in position 2-3: 
truncated \UXXXXXXXX escape

9.1.3 相对路径

1. 什么是绝对路径
“相对路径”就是针对“当前文件夹”这一参考对象,来描述文件路径的形式。
相对路径使用..\\.\\表示。
一个点.\\ 表示文件或文件夹所在的当前目录。
两个点..\\表示当前目录的上一级目录。
上n级就用n 个..\\表示。

2. 任务1:在b.py里打开同一个文件夹里的文件:bbb.txt。

首先用vscode 打开b_file文件夹。
然后打开b.py文件。
注意:用相对路径只能打开b_file文件夹,否则后面的代码会报错!!!

人工操作:在b.py 文件下,要打开bbb.txt 文件:直接点击bbb.txt 文件即可。

大家观察上面的文件流程图,发现b.py 和bbb.txt 位置一样,即在同一文件夹里。
绝对路径中一个点.\\ 表示文件或文件夹所在的当前目录。
那么相对于b.py 而言,bbb.txt 的相对路径为:.\\bbb.txtbbb.txt
因为.\\可以省略不写。
注意路径参数必须有后缀名.txt。

2.1同文件夹绝对路径省略点:bbb.txt

# 在b.py里打开同文件夹文件:bbb.txt
txt = open ('bbb.txt',encoding='utf-8')
print(txt.read())

【终端输出】

今天下雨了!!!

2.2同文件夹绝对路径不省略点:.\bbb.txt

# 在b.py里打开同文件夹文件:bbb.txt
txt = open ('.\\bbb.txt',encoding='utf-8')
print(txt.read())

【终端输出】

今天下雨了!!!

3. 任务2:在b.py里打开下一层次的文件:ccc.txt

大家观察上面的文件流程图,发现ccc.txt在b.py 的下一级目录里。
和b.py同级的是c_file 文件夹。
那么相对于b.py 而言,ccc.txt 的相对路径为:.\\c_file\\ccc.txtc_file\\ccc.txt
.\\可以省略不写。
注意路径参数必须有后缀名.txt。

人工操作:现在打开的是b.py 文件,在打开b.py文件下,要打开 ccc.txt,首先打开c_file,然后打开ccc.txt 文档即可。(大家按照人工打开的方式操作就能理解)

省略.\

# 在b.py里打开下一层次的文件:ccc.txt。
txt = open ('c_file\\ccc.txt',encoding='utf-8')
print(txt.read())

【终端输出】

今天星期六!!!

不省略.\

# 在b.py里打开下一层次的文件:ccc.txt。
txt = open ('.\\c_file\\ccc.txt',encoding='utf-8')
print(txt.read())

【终端输出】

今天星期六!!!

4. 任务3:在b.py里打开上一层次的文件:aaa.txt

大家观察上面的文件流程图,发现aaa.txt在b.py 的上一级目录里。
两个点..\\表示当前目录的上一级目录。
那么相对于b.py 而言,aaa.txt 的相对路径为:..\\a_file\\aaa.txt
人工操作:现在打开的是b.py 文件,文件所在的目录是b_file 文件夹,要打开aaa.txt,往回退一步,找到a_file 文件夹,在点击aaa.txt 即可。
文件夹往上走(后退)一次,就用1个..\\
…\不能省略。

# 任务3:在b.py里打开上1级的文件:aaa.txt。  
txt = open ('..\\a_file\\aaa.txt',encoding='utf-8')
print(txt.read())  

【终端输出】

恭喜你,文件读取成功!!!

4. 任务4:在b.py里打开上2个层次的文件:描述文档.txt

准备工作:
在电脑桌面新建一个名为【Python笔记新】文件夹,里面新建【第9章 文件读写】文件夹,里面新建【文件路径】文件夹,里面新建【相对路径】文件夹,里面新建【描述方式.txt】文档,文档中输入内容“文件夹往上走几层就用几个…\ 。”

描述方式.txt 文档绝对路径为:
“C:\Users\xiaoyuzhou\Desktop\Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt”

b.py 文件绝对路径为:
“C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py”

观察上述2个绝对路径,发现两个文档绝对路径有相同的部分,即都在C:\Users\xiaoyuzhou\Desktop下。

人工操作:我们现在打开的是b.py 文件,b.py 文件所在的目录为b_file文件夹。要打开 描述方式.txt,首先我们往回退2次:
第1次:回到file文件夹;
第2第:退到Desktop。
然后打开桌面的Python笔记新文件夹,依次往下打开文件,就能找到描述方式.txt 文档。

操作中,我们往回退了2次,所以表述时需要用两个..\\
..\\是用来表示回退的次数。

txt = open (
'..\\..\\
Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt',
encoding='utf-8')
print(txt.read())

【终端输出】

文件夹往上走几层就用几个..\\ 。  

9.1.4 相对路径的写法

相对路径一开始我也很难理解,后来查阅一些资料,也咨询了一些朋友,得出下面的结论,不一定准确,仅供大家参考。
我个人理解的相对路径写法就是用..\\.\\代替2个文件绝对路径的共同部分。
…\ 表是文件夹往上走。往上走几层,就用几个..\\
.\ 表示文件是同层或者往下走。

# b.py  xxx.txt 文件绝对路径如下  
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
# "C:\Users\xiaoyuzhou\Desktop\file\xxx.txt" 
# xxx.txt在b.py的上级 
txt = open ('..\\xxx.txt',encoding='utf-8')
print(txt.read())  

【终端输出】

好好学习,天天向上!!!
# b.py  aaa.txt 文件绝对路径如下  
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
# "C:\Users\xiaoyuzhou\Desktop\file\a_file\aaa.txt"
# aaa.txt在b.py的上级 
txt = open ('..\\a_file\\aaa.txt',encoding='utf-8')
print(txt.read())  

【终端输出】

恭喜你,文件读取成功!!!
# b.py  bbb.txt 文件绝对路径如下  
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\bbb.txt"
# bbb.txt和b.py同级
txt = open ('bbb.txt',encoding='utf-8')
print(txt.read())  

【终端输出】

今天下雨了!!!
# b.py  ccc.txt 文件绝对路径  
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\c_file\ccc.txt"
# ccc.txt 在b.py的下一级
txt = open ('c_file\\ccc.txt',encoding='utf-8')
print(txt.read())  

【终端输出】

今天星期六!!!
# b.py 描述方式.txt 文件绝对路径  
# "C:\Users\xiaoyuzhou\Desktop\file\b_file\b.py"
# "C:\Users\xiaoyuzhou\Desktop\Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt"
# b.py往上走2层可以走到共同的Desktop
txt = open (
'..\\..\\Python笔记新\第9章 文件读写\文件路径\相对路径\描述方式.txt',encoding='utf-8')
print(txt.read())

【终端输出】

文件夹往上走几层就用几个..\\ 。  

9.1.5 相对路径的作用

当我们要把代码共享个其他人的时候,如果代码里用的是绝对路径,大家的用户名通常不一样,就会导致路径不一样,大家拿到代码还需要修改路径才能正常运行。
但连同文件一起拷贝,使用相对路径表述不用修改就可以正常运行。
相对路径通常用于存储在一起的文档,如果两者跨层较大,还是选用绝对路径。

9.1.6 总结

来源:安迪python学习笔记

物联沃分享整理
物联沃-IOTWORD物联网 » 9.1 Python 绝对路径与相对路径

发表评论