[英]python 3 - reading a file within zipped archive places 'b' character at start of each line
在下面的代碼中,我總是得到一個奇怪的輸出,它將b放在每一行之前。 只是字母b。
例如,示例輸出如下:
[b'2017-06-01,15:19:57,']
腳本本身是這樣的:
from zipfile import ZipFile
with ZipFile('myarchive.zip','r') as myzip:
with myzip.open('logs/logfile1.txt') as myfile:
next(myfile)
print(myfile.readlines())
歸檔文件中有一個名為“日志”的文件夾,日志中有幾個文本文件,每個文本文件的第一行都位於空的第一行下方(因此, next(myfile)
無論我嘗試讀取哪個文件,它都會在數據前放置b 。 如果文件中有多行,它將輸出如下內容:
[b'2017-06-01,15:06:28,start session: \n', b'2017-06-01,15:06:36,stop session']
為什么將討厭的b放在那兒?
在Python 3.x中,字符串和字節數據之間存在區別。 當將字節表示為字符串時,Python添加b
前綴來表示。 如果要將bytes
視為字符串,則首先需要將它們解碼為字符串:
your_string = your_bytes.decode("utf-8")
當然,您將使用的編解碼器首先取決於將字符串編碼為字節的方式。
由於zip是二進制格式,因此在讀取zip時會提供bytes
而不是str
。
您可以使用str.decode()
轉換
例如
>>>byte_string = b'2017-06-01,15:06:28,start session: \n'
>>>byte_string.decode()
2017-06-01,15:06:28,start session: \n
將給您所需的力量。
在Python 3中,(根據文檔)字節字面量始終以'b'或'B'為前綴; 它們產生字節類型而不是str類型的實例。 它們只能包含ASCII字符; 數值等於或大於128的字節必須用轉義符表示。
這只是澄清打印輸出中的格式。 如果要輸出沒有這種格式的字符串,可以使用如下格式的字符串:
print("%s" % myfile.readlines())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.