簡體   English   中英

python 3-讀取壓縮存檔中的文件,在每行的開頭放置“ b”字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM