在Python中编码和解码字符串

时间:2018-05-15 20:35:34

标签: python string encoding byte

我想使用Python将字符串写入文件。我知道怎么做,所以这不是问题。我也希望在编写完字符串后对其进行编码。编码并不重要,所以我会坚持让我们说UTF-32。我为此做的是在我写完字符串之后,我再次从文件中读取,将字符串编码为字节然后重新写入同一文件。我可以做编码部分,但我的问题出现在解码上。我想把它作为字节读取,以便我可以将它转换回str。我为此做的是同样的原则:从文件读取,解码并写入同一文件。从阅读编码字符串中得到的结果如b'\xff\xfe\x00\x001\x00\x00\x004\x00\x00\x002\x00\x00\x00'

当我将其作为字节读取时,它会使b和反斜杠加倍。如果我像这样读取它,作为一个字符串,然后尝试解码,它会一直说'str' object does not have attribute decode或其他东西。我知道我无法对字符串进行解码,但如果我尝试使用字节,那么它似乎是"倍增"字节。 这是我的代码:

def readfile(filename):
    f = open(filename, 'r')
    s = f.read()
    f.close()
    return s

def readfile_b(filename):
    f = open(filename, 'rb')
    s = f.read()
    f.close()
    return s

def writefile(filename, writeobject):
    f = open(filename, 'w')
    f.write(writeobject)
    f.close()

def encode(filename):
    s = readfile(filename)
    s_enc = bytes(s, 'utf-32')
    writefile(filename, str(s_enc))

def decode(filename):
    s_enc = readfile_b(filename)
    print(s_enc)
    s = str(s_enc, 'utf-32')
    writefile(filename, s)

encode("Example.txt")
decode("Example.txt")

输出(对于decode(),encode()没有任何错误):

b"b'\\xff\\xfe\\x00\\x00H\\x00\\x00\\x00e\\x00\\x00\\x00l\\x00\\x00\\x00l\\x00\\x00\\x00o\\x00\\x00\\x00'"
Traceback (most recent call last):
  File "C:/bla/bla/bla/bla/Example.py", line 29, in <module>
    decode("MamaAccount.txt")
  File "C:/bla/bla/bla/bla/Example.py", line 26, in decode
    s = str(s_enc, 'utf-32')
UnicodeDecodeError: 'utf-32-le' codec can't decode bytes in position 0-3: code point not in range(0x110000)

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

尝试使用带二进制写入的writefile。目前,您正在编写已转换为字符串的字节。当你读回来时,你会得到一个b或2。

这对我有用:

import PyPDF2 
from os import walk
import os
import re
import csv

pdf_location = r'PDF Directory' 
x = ['Search term 1', 'Search term 2', 'Search term 3', 'etc..']

key_terms = []
rule = []
filenamey = []

for dirpath, dirnames, filenames in walk(pdf_location):
    for filename in filenames:
        if filename.endswith('.pdf'):
            pdfFileObj = open(os.path.join(dirpath,filename), 'rb')
            pdfReader = PyPDF2.PdfFileReader(pdfFileObj, strict = False)
            num_pages = pdfReader.numPages
            count = 0
            text = ""

            while count < num_pages:
                pageObj = pdfReader.getPage(count)
                count +=1
                text += pageObj.extractText()


            for i in x:
                if re.search(i,text, re.IGNORECASE):
                    rulex = dirpath.split("Rule")[1]
                    filenamex = filename
                    key_termx = x[0]

                    key_terms.append(key_termx)
                    rule.append(rulex)