用双引号写出文本-Linux上的Python
我试图将查询的文本输出带到SSD(拉一个日志页,类似于拉智能数据。然后我试图从定期更新的日志文件中写入此文本数据) 当某些驱动器的日志数据具有双引号作为空白字段的占位符时,就会出现我的问题。以下是输入的一个片段: 版本0x10200用双引号写出文本-Linux上的Python,python,linux,string,text,Python,Linux,String,Text,我试图将查询的文本输出带到SSD(拉一个日志页,类似于拉智能数据。然后我试图从定期更新的日志文件中写入此文本数据) 当某些驱动器的日志数据具有双引号作为空白字段的占位符时,就会出现我的问题。以下是输入的一个片段: 版本0x10200 视频0x15b7 BoardRev 0x0 BootLoadRev“” 当这被写入(附加)到我自己的日志文件时,文本会被几个空字符替换,然后当我尝试打开所有文本编辑器时,会告诉我它已损坏 在我的Linux系统上,“”字符替换为如下内容: BootLoadRev“\0
视频0x15b7
BoardRev 0x0
BootLoadRev“” 当这被写入(附加)到我自己的日志文件时,文本会被几个空字符替换,然后当我尝试打开所有文本编辑器时,会告诉我它已损坏 在我的Linux系统上,“”字符替换为如下内容: BootLoadRev“\00\00\00\00” 有些字段甚至更长,包含\00个字符。如果“”不存在,则会写出“OK” 代码与此类似:
f=open(fileName, 'w')
test_bench.send_command('get_log_page')
identify_data = test_bench.get_data_in()
f.write(identify_data)
f.close()
有没有一种方法可以将此文本发送到一个文件,而不使用这些空值会导致问题?假设这是Python 2(因此,您的内容就是Python 3所称的bytestring),并且您想要的数据格式是原始ASCII,简单的解决方案是在写入磁盘之前从内容中删除NUL:
f.write(identify_data.replace('\0', ''))
请包含一个精确的复制器——解决这一问题意味着确切地知道详细的错误。(例如,如果您的数据是UTF-32编码的,则会导致每个字符前面有三个NUL;如果您只是从数据源中获取文本NUL,则可能还有另一个源,&c)。事实上,没有足够的信息来精确确定直接原因。如果您从Python中记录
repr(identification_data)
,顺便说一句,这将是一个开始……非常清楚,这里怀疑的是test_bench
中的代码。您似乎得出了以下结论:“quote cause NULs”,但这一信念没有后盾——很可能是“quote环绕字符串,并且来自此源的字符串包含NUL”。因为NUL在直接发送到终端时不会呈现(由于历史原因——当终端是从串行线读取数据的硬件时,您可以在该串行线上发送NUL,告诉它不要做任何事情,并且可以依靠NUL连接串行线所需的时间来计时[…][…],如果您通常只是直接打印test\u bench
内容,您可能根本不知道NUL在那里(尽管它们总是在那里,即使在不渲染到文件时)因为你的终端没有呈现它们。不管怎样:如果你不能提供一个没有test\u bench
就可以重现这个问题的复制器,那么你已经证明用Python编写字符串不是问题,而是test\u bench
的问题。这是一个通过确定需要什么来确定问题范围的机会这也是为什么我们的政策要求本网站上的问题有一个明确的答案的一部分。