python2.7中編碼問題以及txt檔案讀寫的注意事項
首先,要清楚一點:在py檔案和python動態直譯器(命令列)中,輸入中文字串編碼是不一樣的,動態直譯器中預設編碼環境是ansi,比較麻煩(也有解決辦法),建議在py檔案中處理編碼問題。
python2.7中的字串有兩種形式:str”…”和 unicode u”\u…”
1.在py檔案中(推薦使用)
#coding:utf-8
s = "中文"
# '\xe4\xb8\xad\xe6\x96\x87'
# 一個漢字用3個utf-8位元組碼錶示,因此s的長度是6
unis = u"中文"
# u'\u4e2d\u6587
# 一個漢字用一個unicode表示,因此unis的長度為2
utf8s = unis.encode('utf-8' )
# '\xe4\xb8\xad\xe6\x96\x87'
# unicode物件可以編碼為utf-8
uni_utf8s = utf8s.decode("utf-8")
# u'\u4e2d\u6587
# 反之,utf-8格式str可以解碼為unicode
2.python動態直譯器中(不建議)
>>> s = "中文"
>>> s
'\xd6\xd0\xce\xc4' # 和py檔案中的utf-8編碼不同,可能是直譯器將str裡的中文字元編碼成了ansi,這裡有點疑惑
>>> print s
中文 # 視窗列印顯示正確
>>> unis = u"中文"
>>> unis
u'\xd6\xd0\xce\xc4' # 這裡就有問題了
>>> print unis
ÖÐÎÄ # 出現了亂碼……
3.關於txt檔案的讀寫
# coding:UTF-8
# 匯入codecs包不容易出錯
import codecs
# 若open函式中的檔案路徑若有中文字元則需要使用unicode字串,否則直譯器會報錯
# 下面一個例子是,將一個utf-8編碼儲存的txt檔案開啟,修改一部分內容後儲存到一個新建的utf-8編碼txt檔案中
fread = open(u'D:\\Documents\\文獻\\老闆修改意見.txt' ,'r')
# utf-8 格式的位元組碼
rows = fread.readlines()
fread.close()
r1 = rows[0]
# txt檔案的開頭通常有表明編碼型別的位元組塊
# '\xef\xbb\xbf......'前三個位元組碼錶示該txt檔案以utf-8編碼儲存
# 解碼後為u'\ufeff......'
# 使用codecs可以直接新建一個使用utf-8編碼儲存的txt檔案
fwrite_codecs = codecs.open(u'D:\\Documents\\文獻\\新建utf8.txt','a','utf-8')
for row in rows:
# 解碼 unicode 碼
unirow = row.decode('utf-8')
# 等價於 wangls = u'王老師'
wangls = u'\u738b\u8001\u5e08'
# 查詢是否有'王老師',有則跳過該行
if unirow.find(wangls) > -1:
continue
else:
# codecs 的write可以把unicode直接編碼為utf-8後寫入
fwrite_codecs.write(unirow + '\r\n')
fwrite_codecs.close()
print 'done'
# 已有txt是utf-8編碼的情況:
# 程式碼文字中的"str"中文預設為 utf-8,因此直接寫入即可
# 或者將unicode編碼成utf-8再寫入,兩者是等價的
fwrite = open(u'D:\\Documents\\文獻\\2.txt','a')
s1 = "這是一行中文"
s2 = u"這是一行中文".encode('utf-8')
# s1 == s2 True
fwrite.write(s1)
fwrite.close()
總之,關於編碼的問題,最好在.py檔案中處理,並且一定要清楚txt檔案編碼型別、檔案開啟的方式(open和codecs不同,codecs是編碼可選的,讀取內容的編碼是不一樣的),一定要做到心中有數,才不會混淆。
相關推薦
python2.7中編碼問題以及txt檔案讀寫的注意事項
首先,要清楚一點:在py檔案和python動態直譯器(命令列)中,輸入中文字串編碼是不一樣的,動態直譯器中預設編碼環境是ansi,比較麻煩(也有解決辦法),建議在py檔案中處理編碼問題。 python2.7中的字串有兩種形式:str”…”和 unicode u
MFC中TXT檔案讀寫
文字檔案的讀寫 正確的文字檔案讀寫過程 1.定義檔案變數;2.開啟指定的檔案;3.向從文字檔案中寫入資訊;4.從文字檔案中讀取資訊;5.關閉檔案 1、定義檔案變數 定義檔案變數格式:CStdioFile 檔案變數; 例如,定義一個名稱為f1的檔案變數,語句如下:
Python檔案讀寫注意編碼
檔案的讀寫操作1.python3中的預設的編碼解碼方式為utf-8 windows預設使用的編碼方式為gbk 當讀取一個windows檔案(gbk),可以指定讀取時使用的編碼encoding=('gbk')或者不需要指定 with open('a.txt','r','encoding=(gbk)') as f
Linux C學習筆記——txt檔案讀寫
/*************** perror(s) 用來將上一個函式發生錯誤的原因輸出到標準裝置(stderr)。引數 s 所指的字串會先打印出,後面再加上錯誤原因字串。此錯誤原因依照全域性變數errno的值來決定要輸出的字串。 FILE * fopen(const c
(Android)Android TXT檔案讀寫
轉載網址:http://blog.csdn.net/wirelessqa/article/details/7807762 package com.wirelessqa.helper; import java.io.FileInputStream; import java
Python3 JSON 中文字元讀寫注意事項
一些說明 我為什麼要寫這篇文章? 最近報名了中國大學MOOC的嵩天老師的爬蟲課,頗有收穫,決定自己找個大學新聞網站練練手,果然還是碰到了臭名昭著的中文字元處理的問題,特此記錄。 這篇文章講什麼? 這篇文章講的是如何把 Python 中的 Dict
java指定編碼的按行讀寫txt檔案(幾種讀寫方式的比較)
輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf
【機器人學】機器人開源專案KDL原始碼學習:(7)examples中的CMakeList.txt檔案解讀
通過學習KDL開源專案的程式碼可以學習CMake構建程式的知識,現簡單介紹一下orocos_kinematics_dynamics-master\orocos_kinematics_dynamics-master\orocos_kdl\examples\CMakeList.txt檔案的指令。
matlab中常見txt檔案讀入的實用方法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
python讀txt檔案讀資料,然後修改資料,再以矩陣形式儲存在檔案中
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # -*- coding: UTF-8 -*- import numpy as np import glob import tensorflow as tf flag=T
在centos 7 中 conda 環境和Python2.7 中安裝遠程jupyter
配置 pass 準備 pen env conda 其他 nbsp 隔離 折騰了半天,為了能夠方便學習TensorFlow,搞了遠程的jupyter,方便在本地使用它,今天填了不少坑。 裝完後截圖: 下面是一些步驟: 檢查 Python 環境 CentOS 7
CentOS6.8 安裝python2.7,pip以及yum
python版本 whereis make qlite 常用 無法 adl rpm -ivh pda 由於CentOS6.8裏自帶的yum所依賴的python是2.6.66版本,但是安裝pip至少要求python是2.7版本,因而原有的2.6並不能卸載,又得安裝新的2.
Python2.7字元編碼詳解
Python2.7字元編碼詳解 Python27字元編碼詳解 宣告 一 字元編碼基礎 1 抽象字元清單ACR 2 已編碼字符集CCS 3 字元編碼格式CEF
python中json檔案讀寫
下面介紹json檔案的相關操作 我瞭解到Json,全名 JavaScript Object Notation,是一種輕量級的資料交換格式。Json最廣泛的應用是作為AJAX中web伺服器和客戶端的通訊的資料格式。現在也常用於http請求中,所以對json的各種學習,是自然而然的事情。
Python2.7 呼叫Windows X86 DLL檔案獲取返回報文並提取token
研究了我兩天,主要是對這個dll的資料型別不瞭解 不知道如何轉換,所以現在記下筆記。下面是調取win32介面工具的dll檔案進行對介面返回報文進行解碼並獲取token值。。。。。。 #!user/bin/python2.7 #coding:utf-8 import re import ct
2.7 檔案操作1:檔案讀寫的一般操作
匯入依賴 import ( "os" "fmt" "time" "bufio" "io" "io/ioutil" ) 開啟和關閉檔案 fun
python中檔案讀寫
讀寫檔案是最常見的IO操作。Python內建了讀寫檔案的函式,用法和C是相容的。 讀寫檔案前,我們先必須瞭解一下,在磁碟上讀寫檔案的功能都是由作業系統提供的,現代作業系統不允許普通的程式直接操作磁碟,所以,讀寫檔案就是請求作業系統開啟一個檔案物件(通常稱為檔案描述符),然後,通過作業系統提供的介面從
python檔案讀寫(從file1中讀出資料並計算,然後將結果寫入到file2中)
要求新建兩個檔案,file1、file2,要求開啟file1檔案,分別對每一行數字進行求和,並將每一行的結果寫在file2中。 file1: 20 30 40 20 52 63 52 52 85 52 8 456 522 25 36 85 96 74 程式原始碼: 定義一個求和函式
MFC中的檔案讀寫方法總結
CStdioFile繼承自CFile,一個CStdioFile 物件代表一個用執行時函式fopen 開啟的C 執行時流檔案。 流式檔案是被緩衝的,而且可以以文字方式(預設)或二進位制方式開啟。文字方式提供對硬回車—換行符對的特殊處理。當你將一個換行符(0x0A)寫入一個文字方式的CStdioFi
Unity下關於C#的檔案讀寫一(基於TXT的簡單讀寫)
Unity下關於C#的檔案讀寫(基於TXT和LitJson) NOTE (基本認識):其實.txt,.xml,.json這類檔案都屬於文字檔案,類似的還有.lrc歌詞檔案,.ini配置檔案,.reg登錄檔檔案等等,這類檔案所儲存的內容都是文字(即為字串),