Python新手问题集锦|路径问题 编码问题(utf-8,gbk)等

版权声明:博客追求原创,如果有借鉴尽量都在文后注明 https://blog.csdn.net/DefaultTest/article/details/81156060

经常看到群里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是指错误的处理方案。

详细的可以参照官方文档:

猜你喜欢

转载自blog.csdn.net/DefaultTest/article/details/81156060