Skip to content

Conversation

@u-one
Copy link

@u-one u-one commented Jun 1, 2025

以下のように --output のパラメタに ./data/output/ 以外のpathを指定すると最後のファイル保存処理で
出力pathが見つからない旨のエラーになりました。

原因は実装の一部が、outputの引数に関係なく./data/output/ 以下を出力先を想定している実装になっているようです。

現象

エラー発生時のコマンドとエラー内容:

>poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./output
2025-06-01 16:13:27,167 - INFO - Processing start: data\53393420_bldg_6697_op.gml
2025-06-01 16:13:27,168 - INFO - Triangulation: data\53393420_bldg_6697_op.gml
2025-06-01 16:16:07,445 - INFO - Voxelize: data\53393420_bldg_6697_op.gml
2025-06-01 16:18:06,700 - INFO - Processing end: data\53393420_bldg_6697_op.gml
2025-06-01 16:18:06,700 - INFO - Merging: [WindowsPath('data/53393420_bldg_6697_op.gml')]
2025-06-01 16:18:06,754 - INFO - To : [WindowsPath('data/53393420_bldg_6697_op.gml')]
origin_point: (15529769.0, 4246305.0)
save: r.-2.-1.mca
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "D:\oss\plateau2minecraft\src\plateau2minecraft\__main__.py", line 49, in <module>
    region = Minecraft(merged).build_region(args.output)
  File "D:\oss\plateau2minecraft\src\plateau2minecraft\converter.py", line 89, in build_region
    region.save(f"{output}/world_data/region/{block_id}")
  File "D:\oss\plateau2minecraft\src\plateau2minecraft\anvil\empty_region.py", line 348, in save
    with open(file, "wb") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'output/world_data/region/r.-2.-1.mca'

原因

具体的には、以下の処理は ./data/output/world_data/region が出力先として固定pathになっている。

  • 出力先のpath存在チェック
  • 存在する場合のファイル削除
  • 存在しない場合のpath作成

一方、最終的に生成ファイルの出力先だけ {output}/world_data/region となるようになっている。

その結果、outputパラメタが ./data/output/ を指定している場合は問題ないようですが、
これ以外を指定するとpathがあらかじめ存在する場合以外はファイルsave時にpathが存在せずエラーとなるようです。

修正内容

上記の一部pathが固定されている箇所をすべて、
{output}/world_data/region
となり一貫したpathを参照するよう修正しました。

動作確認

ディレクトリが存在しない状態で以下2パターンを実行

poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./output

./output/world_data/region にファイルが生成される

poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./data/output

./data/output/world_data/region にファイルが生成される

ディレクトリと生成ファイルが存在する状態で以下を実行

poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./data/output

./data/output/world_data/regionのファイルが一度削除されて再び生成される

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant