我正在阅读一个文本文件,其中包含以编码方式转储的binaray数据的行,但仍作为字符串(至少在emacs中):
E.g:
\240\263\205k\347\301\360G\224\217yr\335\355#\333\0320^\242\367\021\227C\035\000\207\016\327\201\360\242
这对我来说非常好,当我在该文件中读到时,我想保留这个字符串,而不是以任何方式解码或更改它。但是,当我在文件中读取时,python会进行解码。我该如何防止这种情况?
with open("/path/to/file") as file:
for line in file:
print line
输出结果如下:
'���k���G�r��#�\0320^��\021�C\035\000�\016ׁ��'
但应该是这样的:
\240\263\205k\347\301\360G\224\217yr\335\355#\333\0320^\242\367\021\227C\035\000\207\016\327\201\360\242
编辑:但是,此编码数据不是唯一包含的数据,而是较大文本转储的一部分。
答案 0 :(得分:1)
如果你真的想要八进制表示,你可以定义一个将其打印出来的函数。
import string
def octal_print(s):
print(''.join(map(lambda x: x if x in string.printable else '\\'+oct(ord(x))[2:], s)))
s = '\240\263\205k\347\301\360G\224\217yr\335\355#\333\0320^\242\367\021\227C\035\000\207'
octal_print(s)
# prints:
\240\263\205k\347\301\360G\224\217yr\335\355#\333\320^\242\367\21\227C\35\0\207
答案 1 :(得分:1)
您可以使用'rb'选项将文件读取为二进制文件,它将保留数据
<强> EX:强>
with open(PathToFile, 'rb') as file:
raw_binary_data = file.read()
print(raw_binary_data)
答案 2 :(得分:0)
根据詹姆斯的回答我调整了USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4";
deviceMetrics.put("width", 375);
deviceMetrics.put("height", 667);
deviceMetrics.put("pixelRatio", 2.0);
mobileEmulation.put("deviceMetrics", deviceMetrics);
mobileEmulation.put("userAgent", USER_AGENT );
options.setExperimentalOption("mobileEmulation", mobileEmulation);
driver = new ChromeDriver(options);
@FindBy(id = "off-canvas-header-trigger)
protected WebElement clicknavbar;
public MobilePage clicknavigation() {
driver.click(clicknavbar, "Unable to click navigation bar");
return this;
}
public boolean click(WebElement element, String errorMessage) {
softAssert.setCause(null);
boolean success = true;
try {
element.click();
} catch (Exception e) {
throw e;
}
}
函数来区分实际的八进制和无辜的角色。
octal_print