1. 程式人生 > >Python新手問題集錦|路徑問題 編碼問題(utf-8,gbk)等

Python新手問題集錦|路徑問題 編碼問題(utf-8,gbk)等

經常看到群裡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是指錯誤的處理方案。

詳細的可以參照官方文件:

相關推薦

Python新手問題集錦|路徑問題 編碼問題(utf-8,gbk)

經常看到群裡python新同學問一些簡單的問題,有些實在簡單老鳥不太願意答,因為一句說不清楚,但是對於新手來說也是一個困擾,所以正好閒暇片刻就來隨筆一下,時間倉促若有錯誤請指正。 一、路徑問題

Python中的編碼問題:ASCII碼 Unicoden編碼 UTF-8編碼

分享 動態 src 服務 .com 傳輸 ascii 函數計算 row 編碼 字符串是一種數據類型,但是,字符串比較特殊的是還有一個編碼問題。 因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時采用8個比特(bit)作為一個字節(

解決Qt中文亂碼以及漢字編碼的問題(UTF-8/GBK)

檔案從window上傳到Ubuntu後會顯示亂碼,原因是因為ubuntu環境設定預設是utf-8,Windows預設都是GBK. Windows環境下,Qt Creator,選單->工具->選項->文字編輯器->行為->檔案編碼: 預設編碼:Sy

深入理解Python的字元編碼utf-8 & unicode

參考:http://lukejin.iteye.com/blog/598303 一,通過例子理解字元編碼 在Python中有兩個和字元很相關的型別,一個是str型別,一個是unicode型別。 這兩種型別的物件都是sequece序列,其中str是位元組序列,而unicode

字元編碼及由來(UNICODE,UTF-8,GBK)

轉載自:https://blog.csdn.net/stilling2006    很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為"位元組"。   再後來,他們又做了一些可以處理這些位元

maven 編碼 UTF-8 的不可對映字元 maven 編碼 GBK 的不可對映字元

當時我碰到這個問題的時候,按照網上的方法,配來配去還是不行,然後因為專案有兩個類是GBK編碼格式,其它的是UTF-8的,然後就突發奇想,把再建兩個類,把單獨這兩個類複製進去,把原來的刪了不就好了? 我就試了試,還真解決了,然後我也把網上的一些方法,找出來,說不定你就用得上了

常見的幾種字元編碼方式 ASCII Unicode UTF-8 GBK

在設計資料庫和網頁程式編寫的時候,經常涉及到一些編碼方式的問題,在此總結一下! 原文地址:http://blog.csdn.net/csywwx2008/article/details/17137097 常見的一些字元編碼方式無非有:Unicode、ASCII、GBK

ant編譯報錯“錯誤: 編碼UTF-8的不可映射字符”

ant 編譯報錯 error 根據報錯 的提示是編碼的問題,build.xml文件使用的是ANSI,文件中首行使用,網上查資料都是將encoding設置為GBK,設置之後是之前報錯的文件“AdvertiserAction.java”正常了,但是又會產生新的文件“PageUtil.java”報錯“錯

Linux(Ubuntu)使用日記------Mysql編碼(utf-8)的設置

img clu mysql5.7 inf sof 圖片 tex rac mysql配置文件 Mysq版本:5.7.21 操作系統:Linux(Ubuntu) 整個操作的基本思路如下(包括問題的解決思路,想要直接解決問題的可以先看最後的命令總結) 檢查mysql編碼

python中sys.setdefaultencoding('utf-8')的作用

error: ron load 而不是 ans Coding nbsp 我們 set 在python中,編碼解碼其實是不同編碼系統間的轉換,默認情況下,轉換目標是Unicode,即編碼unicode→str,解碼str→unicode,其中str指的是字節流,而str.de

windows設置新建文本文檔默認編碼UTF-8

編輯 windows 文本 修改 復制 管理 目的 roo shell 1. 打開記事本新建一個空白的文本文檔,不輸入任何文字,然後保存此文檔,在“另存為”對話框中將編碼由默認的 ANSI 修改為 Unicode 或 UTF-8,接著為文件取名,在此假設將新文檔命名為 UN

eclipse中如何設置在新建JSP/XML文件時就指定編碼UTF-8

cli Language family ref 發現 encoding 需要 unicode tty eclipse新建jsp文件默認字符編碼為ISO-8859-1,很煩人,每次都需要更改 <%@ page language="java" contentType=

python輸出文件為utf-8格式的文件

py不同版本輸出json檔案,對檔案編碼的引數設定是不一樣的,在3版本中,若是要輸出帶中文的json文件,需要把輸出的編碼方式定義在open上,否則會引起輸出的json文件亂碼,具體的可以看例項: # coding= utf-8 import json outputFilePath =

關於字元編碼UTF-8

字元編碼 我們已經講過了,字串也是一種資料型別,但是,字串比較特殊的是還有一個編碼問題。 因為計算機只能處理數字,如果要處理文字,就必須先把文字轉換為數字才能處理。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11

ANT 編譯警告: 編碼 UTF-8 的不可對映字元解決方法

今天開始學ant自動構建工具。在編譯原始檔的時候碰到一個警告: 9: 警告:編碼 UTF8 的不可對映字元     [javac]  System.out.println("ʹ��jar�ļ����");     [javac]                      

Python中出現SyntaxError:Non-UTF-8 code錯誤的解決方法

在七節數碼管繪製的程式中,遇到了如下報錯: Non-UTF-8 code starting with ‘\xc4’ in file main.py on line 47, but no encoding

python 字串輸出報錯 'utf-8' codec can't encode characters in position

一些字串無法被utf-8解碼,所以可以把無法轉化為utf-8格式的字元‘ignore’掉,再進行解碼。 str().encode('UTF-8', 'ignore').decode('UTF-8') 測試程式碼:  text = ''' '\n

常見的字元編碼UTF-8UTF-16、UTF-32

字符集 字符集為每個字元分配了一個唯一的編號,通過這個編號就能找到對應的字元。在程式設計過程中我們經常會使用字元,而使用字元的前提就是把字元放入記憶體中,毫無疑問,放入記憶體中的僅僅是字元的編號,而不是真正的字元實體。 如何才能將字元編號放入記憶體中呢? 對於

oracle資料庫字元編碼utf-8改為ZHS16GBK

首先檢視服務端字符集 select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET' NLS_CHARACTERSET WE8MSWIN1252 然後用sys使用者進行修改 >sqlplus  >co

python 讀入csv 出現utf-8 錯誤

在解析csv檔案的時候出現報錯: 'utf-8' codec can't decode byte 0xff in position 0 這說明此csv是binary檔案,你應該將它轉換為utf-8就能被python讀取。 或者參考以下方式讀取(但是這樣