我想使用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)
非常感谢任何帮助
答案 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)