Python和.NET之间二进制文件的兼容性

时间:2015-10-18 19:05:34

标签: python .net vb.net file-io binaryfiles

.NET程序创建的二进制文件是否可以被Python读取,反之亦然?

哪种数据类型与此兼容?

示例VB.NET程序:

Sub Main()
    Using writer As New System.IO.BinaryWriter( _
    System.IO.File.Open("Test.bin", IO.FileMode.Create))
        writer.Write(True)
        writer.Write(123)
        writer.Write(123.456)
        writer.Write(987.654D)
        writer.Write("Test string.")
    End Using
    Using reader As New System.IO.BinaryReader( _
    System.IO.File.Open("Test.bin", IO.FileMode.Open))
        Console.WriteLine(reader.ReadBoolean())
        Console.WriteLine(reader.ReadInt32())
        Console.WriteLine(reader.ReadDouble())
        Console.WriteLine(reader.ReadDecimal())
        Console.WriteLine(reader.ReadString())
    End Using
    Console.Write("Press <RETURN> to exit.")
    Console.ReadKey()
End Sub

1 个答案:

答案 0 :(得分:1)

Python使用相同的约定存储二进制数据的可能性很小。

需要注意的问题包括从结束到数据结构布局的所有内容。英特尔CPU使用最低有效位排序,TCP / IP网络协议和许多非英特尔CPU,包括UNIX传统上运行的CPU,使用最重要的位排序。像.NET这样的平台无关系统在编写二进制文件时会坚持一个排序。因此,无论是在Core i7,ARM还是其他CPU上运行,.NET都将与自身兼容。但即使Python始终使用与.NET相同的顺序,它也不太可能以相同的方式布置数据类型和数据结构。

如果需要在两个平台上使用兼容的文件IO库,这将使您处于适当位置,这比您想要注册的工作更多。

幸运的是,有些库可供您使用。有关示例,请参阅this answer

当然,执行此类操作的现代友好方式是以XML或JSON格式写出分隔的文本文件。或者,如果您正在处理非常大的数据集,只需使用数据库。