From f6bcef3efc8c422b4b80d76f496d5fe5e79090ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=B0=E8=A8=80?= Date: Tue, 30 Jun 2026 13:19:10 +0800 Subject: [PATCH] Fix: skip leading empty rows in CsvConverter to avoid data loss --- .../src/markitdown/converters/_csv_converter.py | 8 ++++++++ packages/markitdown/tests/test_module_misc.py | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/markitdown/src/markitdown/converters/_csv_converter.py b/packages/markitdown/src/markitdown/converters/_csv_converter.py index 7e9631e1b..970753043 100644 --- a/packages/markitdown/src/markitdown/converters/_csv_converter.py +++ b/packages/markitdown/src/markitdown/converters/_csv_converter.py @@ -51,6 +51,14 @@ def convert( reader = csv.reader(io.StringIO(content)) rows = list(reader) + # Skip leading empty rows + start_idx = 0 + while start_idx < len(rows) and ( + not rows[start_idx] or all(cell.strip() == "" for cell in rows[start_idx]) + ): + start_idx += 1 + rows = rows[start_idx:] + if not rows: return DocumentConverterResult(markdown="") diff --git a/packages/markitdown/tests/test_module_misc.py b/packages/markitdown/tests/test_module_misc.py index 4d62e4919..c5f401124 100644 --- a/packages/markitdown/tests/test_module_misc.py +++ b/packages/markitdown/tests/test_module_misc.py @@ -532,6 +532,21 @@ def test_markitdown_llm() -> None: validate_strings(result, PPTX_TEST_STRINGS) +def test_csv_with_blank_first_line() -> None: + markitdown = MarkItDown() + csv_content = "\n\nname,age\nbob,3\nalice,7\n" + result = markitdown.convert_stream( + io.BytesIO(csv_content.encode("utf-8")), + file_extension=".csv", + ) + assert "name" in result.text_content + assert "age" in result.text_content + assert "bob" in result.text_content + assert "3" in result.text_content + assert "alice" in result.text_content + assert "7" in result.text_content + + if __name__ == "__main__": """Runs this file's tests from the command line.""" for test in [ @@ -547,6 +562,7 @@ def test_markitdown_llm() -> None: test_markitdown_exiftool, test_markitdown_llm_parameters, test_markitdown_llm, + test_csv_with_blank_first_line, ]: print(f"Running {test.__name__}...", end="") test()