经常看到群里python新同学问一些简单的问题,有些实在简单老鸟不太愿意答,因为一句说不清楚,但是对于新手来说也是一个困扰,所以正好闲暇片刻就来随笔一下,时间仓促若有错误请指正。
一、路径问题
-
1.1 相对路径(地址)
-
“
./
” 表示当前文件所在目录下,比如:“./pic.jpg” 表示当前目录下的pic.jpg的图片,而实际使用时"./"可以省略。 -
“
../
” 表示当前文件所在目录下的上一级目录,比如:“../images/pic.jpg” 表示当前目录下的上一级目录下的images文件夹中的pic.jpg的图片。
-
-
1.2 绝对路径(地址)
-
相对于磁盘的位置去定位文件的地址,比如:"
C:\Users\Desktop\images\001.jpg
" ,指的是windows电脑C盘桌面上images文件夹里面的000.jpg图片文件。“/home/python/Desktop/images/001.jpg
”,指的是Linux系统中桌面上images文件夹里面的001.jpg图片文件。注:“/
”表示Linux系统的根目录。
-
-
1.3 不同操作系统的格式差异(这里以window和LInux系统举例):
-
最主要的差别就是Linux系统下是:“
/
” -
windows系统下是“
\
”
-
-
1.4 上面是不同操作系统对文件路径的表示方式差异,使用Python的时候还会遇到一个问题:
-
“
\
”在python中有特殊的含义,表示转义字符。所以比如“\n
\a
\b
”等等,在windows系统下存在一个问题:需要转义,而转义字符就是“\
”。所以,就变成了双反斜杠,类似"C:\\a\\b
"来表示才行。 -
在Linux系统中则不存在这个问题。
-
补充:windows系统中运行python打开文件的时候存在一个原生字符串r的解决方案:
r“\n \a \b
”则解决了这个问题。只需要在路径前面加上r或R。
-
-
1.5 补充,有些新新手使用windows下的cmd终端来运行桌面上的python文件"xx.py",偶尔发现找不到路径运行不了,就是因为移动了文件的位置,而cmd默认进入的不是桌面路径。
-
所以需要cd到对应的路径,具体命令:
cd C:xxxxx\xxxxx\xx.py
然后再python xx.py
来调用python解释器运行xx.py文件。 -
或者:在当前xx.py文件路径中,按住shitf + 鼠标右键, 找到命令"在此处打开powershell窗口"或者"在此处打开cmd窗口",然后再
python xx.py
来调用python解释器运行xx.py文件。
-
二、Python编码问题
-
2.1 这个问题也是一个万年的老问题,python3目前已经支持中文了,所以相对的问题少了很多。如果是在python2.x的版本中,请在要运行的xx.py文件中顶行加上类似“
# -*- coding:utf-8 -*-
”,使用通用的utf-8
编码,当然这只是初级的问题。 -
2.2 在实际开发中,比如爬虫中使用requests、urllib.request等库的时候,传递参数仍然会出现编码解码问题,这个时候 就是需要运用 encoding("utf-8") 和 decoding("utf-8")来编码解码。因为一般数据传输是bytes字节文件,而我们阅读的时候是txt等格式文件。
-
2.3 Linux系统中收发数据都是utf-8来编码解码;但是windows接收文件是gbk编码,发送文件是utf-8编码,所以这个有是个坑。
-
2.4 Python编码转换
str -> bytes: encode编码 bytes-> str: decode解码
字符串通过编码成为字节码,字节码通过解码成为字符串.
>>> text = '我是文本'
>>> text
'我是文本'
>>> print(text)
我是文本
>>> bytesText = text.encode()
>>> bytesText
b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
>>> print(bytesText)
b'\xe6\x88\x91\xe6\x98\xaf\xe6\x96\x87\xe6\x9c\xac'
>>> type(text)
<class 'str'>
>>> type(bytesText)
<class 'bytes'>
>>> textDecode = bytesText.decode()
>>> textDecode
'我是文本'
>>> print(textDecode)
我是文本
其中decode()与encode()方法可以接受参数,其声明分别为:
bytes.decode(encoding="utf-8", errors="strict") str.encode(encoding="utf-8", errors="strict") 其中的encoding是指在解码编码过程中使用的编码(此处指“编码方案”是名词),errors是指错误的处理方案。
详细的可以参照官方文档: