【问题标题】:Attempting to parse a file (mmp format) from legacy software using Python尝试使用 Python 从旧版软件解析文件(mmp 格式)
【发布时间】:2019-08-18 02:56:23
【问题描述】:

我有一个名为 Mixmeister 的旧版软件,它以 MMP 格式保存播放列表文件。

这种格式似乎包含二进制文件路径。

我希望从这些文件中提取文件路径以及任何其他信息。

我看到这是使用 JAVA 完成的(我不知道 JAVA)在这里(见 aorund ln 56): https://github.com/liesen/CueMeister/blob/master/src/mixmeister/mmp/MixmeisterPlaylist.java

这里还有 Haskell: https://github.com/larjo/MixView/blob/master/ListFiles.hs

到目前为止,我已经尝试将文件作为二进制文件读取(卡住了);使用正则表达式(杂乱的输出,成功率适中)并尝试尝试一些代码来读取块(超出我的技能水平)。

我在 Regex 中使用并取得了一定成功的代码是:

file='C:\\Users\\xxx\\Desktop\\mixmeisterfile.mmp'
with open(file, 'r', encoding="Latin-1") as filehandle:
#with open(file, 'rb') as filehandle:    
    for text in filehandle:
        b = re.search('TRKF(.*)TKLYTRKM', text)
        if b:
            print(b.group())

再次,这让我很接近,但很混乱(数据并非全部完整,并且被 ascii 和二进制字符包围)。基本上,我的逻辑只是在两个字符串之间搜索以尝试提取文件名。我真正想做的是更接近 JAVA 在 GIT 中所具有的东西,即(下面的代码来自 GIT 链接):

    List<Track> tracks = new ArrayList<Track>();
    Marker trks = null;

    for (Chunk chunk : trkl.getChunks()) {
      TrackHeader header = new TrackHeader();
      String file = "";
      List<Marker> meta = new LinkedList<Marker>();

      if (chunk.canContainSubchunks()) {
        for (Chunk chunk2 : ((ChunkContainer) chunk).getChunks()) {
          if ("TRKH".equals(chunk2.getIdentifier())) {
            header = readTrackHeader(chunk2);
          } else if ("TRKF".equals(chunk2.getIdentifier())) {
            file = readTrackFile(chunk2);
          } else {
            if (chunk2.canContainSubchunks()) {
              for (Chunk chunk3 : ((ChunkContainer) chunk2).getChunks()) {
                if ("TRKM".equals(chunk3.getIdentifier())) {
                  meta.add(readTrackMarker(chunk3));
                } else if ("TRKS".equals(chunk3.getIdentifier())) {
                  trks = readTrackMarker(chunk3);
                }
              }
            }
          }
        }
      }

      Track tr = new Track(header, file, meta);

我猜如果不使用正则表达式,这将使用 RIFF 或 Python 中的块库?虽然我阅读了https://docs.python.org/2/library/chunk.html 的文档,但我不确定我是否理解如何处理这样的事情 - 主要是我不明白如何正确读取文件路径中可见混合的二进制文件。

【问题讨论】:

    标签: java python-3.x binary chunks


    【解决方案1】:

    我真的不知道这里发生了什么,但我会尽力而为,如果没有成功,请原谅我的愚蠢。当我有一个为 Metar 解析天气数据的项目时,我意识到我的主要问题是我试图将所有内容都转换为 String 类型,这并不适合所有数据,所以它会一无所有.您的 for 循环应该可以正常工作。但是,当您遍历时,您是否尝试过使所有内容都具有相同的类型,例如 Character/String 类型?也许有某些元素只是因为它们与您想要的类型不匹配而搞砸了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多