如何在Python中将.reg文件复制到纯.txt?

时间:2019-07-02 09:47:45

标签: python encoding shutil text-manipulation

我用file.readline()一些注册表文件来过滤掉一些子字符串。我正在使用shutil.copyfile()对其进行复制(只是保留原始图像),并通过foo()处理,因此看不到任何内容被过滤掉。尝试调试,并且行的内容非常二进制:

'˙ţW\ x00i \ x00n \ x00d \ x00o \ x00w \ x00s \ x00 \ x00R \ x00e \ x00g \ x00i \ x00s \ x00t \ x00r \ x00y \ x00 \ x00E \ x00d \ x00d \ x00i \ x00t \ x00o \ x00r \ x00 \ x00V \ x00e \ x00r \ x00s \ x00i \ x00o \ x00n \ x00 \ x005 \ x00。\ x000 \ x000 \ x00 \ n'

这很明显,但是却不知道这一点(Notepad ++整洁的文本表示)。我的问题是:如何过滤出我的琴弦? 我看到两个选项,分别是reg-> txt-> reg方法(即标题的意思)或将字符串转换为字节,然后将它们与内容进行比较。

当我手动创建文件(复制并粘贴输入文件的内容)并提供.txt文件时,一切正常,但我希望它可以自动化。

inputfile = "filename_in.reg"
outputfile = "filename_out.reg"
copyfile(inputfile, output file)

with open(outputfile, 'r+') as fd:
    contents = fd.readlines()
    for d in data:
        foo(fd, d, contents)

1 个答案:

答案 0 :(得分:0)

Reg文件通常为UTF-16(在MS文档中通常称为“ Unicode”。看起来您的调试程序将数据视为8位字符(因此,\x00有很多16位字符的顺序字节)。可以说服Notepad ++显示UTF-16。

解决方法是告诉Python您正在阅读的文本为UTF-16格式:

open(outputfile, 'r+', encoding='utf16')