From f69a3aace48f0460bcca40518c818a7af7a9eb48 Mon Sep 17 00:00:00 2001 From: Floppyrj45 Date: Fri, 24 Apr 2026 01:39:04 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20inspect=5Ftopics=20=E2=80=94=20liste=20?= =?UTF-8?q?tous=20les=20topics=20MCAP=20avec=20fr=C3=A9quences?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extract/inspect_topics.py | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 extract/inspect_topics.py diff --git a/extract/inspect_topics.py b/extract/inspect_topics.py new file mode 100644 index 0000000..88cecc4 --- /dev/null +++ b/extract/inspect_topics.py @@ -0,0 +1,47 @@ +import sys +import glob +from mcap.reader import make_reader + +class LargeRecordWrapper: + def __init__(self, fp): + self.fp = fp + + def read(self, size=-1): + return self.fp.read(size) + + def seek(self, pos, whence=0): + return self.fp.seek(pos, whence) + + def tell(self): + return self.fp.tell() + + def seekable(self): + return True + +def inspect(bag_dir: str): + files = sorted(glob.glob(f"{bag_dir}/*.mcap")) + if not files: + print(f"No MCAP files in {bag_dir}") + return + topics: dict[str, dict] = {} + for path in files: + try: + with open(path, "rb") as fp: + wrapped = LargeRecordWrapper(fp) + reader = make_reader(wrapped) + for schema, channel, message in reader.iter_messages(): + t = channel.topic + if t not in topics: + topics[t] = {"type": schema.name if schema else "?", "count": 0, "encoding": channel.message_encoding} + topics[t]["count"] += 1 + except Exception as e: + print(f"Warning: error reading {path}: {e}", file=sys.stderr) + continue + + print(f"\n{'Topic':<50} {'Type':<45} {'Msgs':>6}") + print("-" * 105) + for t, info in sorted(topics.items()): + print(f"{t:<50} {info['type']:<45} {info['count']:>6}") + +if __name__ == "__main__": + inspect(sys.argv[1] if len(sys.argv) > 1 else "data/bags")