satan53x / SExtractor

从GalGame脚本提取和导入文本
GNU General Public License v3.0
225 stars 15 forks source link

CSV文件导入JSON时报错IndexError: index 8 is out of bounds for axis 0 with size 5 #51

Closed allrobot closed 7 months ago

allrobot commented 7 months ago

transDic.json

CSV文件 00000001.csv

CSV导出为JSON,CSV引擎,编码UTF-8-SIG,分隔符⚔,正则表达式:

22_search=^([\s\S]+)$
extraData=^Original text$
writeOffset=4
sample=<不要启用纯文本模式>

JSON导入到CSV,正则表达式:

22_search=^([\s\S]+)$
extraData=^Original text$
writeOffset=5
sample=<不要启用纯文本模式>

报错:

---------------------------------
{'file': 'txt', 'workpath': 'F:\\BaiduNetdiskDownload\\[Nighthawk] Complete series ストッピング 13 [4G]\\ストッピング!!! 陸上競技編\\stopping_extract\\翻译工程', 'engineName': 'CSV', 'outputFormat': 3, 'outputPartMode': 0, 'nameList': '', 'regDic': '22_search=^([\\s\\S]+)$\nextraData=^Original text$\nwriteOffset=4\nsample=<不要启用纯文本模式>\n', 'outputFormatExtra': -1, 'encode': 'UTF-8-SIG', 'print': [False, True, True, True, True], 'splitParaSep': '⚔', 'maxCountPerLine': 365, 'cutoff': False, 'cutoffCopy': True, 'noInput': False, 'splitAuto': False, 'ignoreSameLineCount': False, 'ignoreNotMaxCount': True, 'fixedMaxPerLine': True, 'binEncodeValid': False, 'pureText': False, 'tunnelJis': False, 'subsJis': False, 'transReplace': True, 'preReplace': False, 'skipIgnoreCtrl': False, 'skipIgnoreUnfinish': False, 'ignoreEmptyFile': True}
正则规则: 22_search ^([\s\S]+)$
正则规则: extraData ^Original text$
正则规则: writeOffset 4
读入Json:  176 transDic.json
---------------------------提取或导入时发生错误---------------------------
Traceback (most recent call last):
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\main\thread.py", line 18, in run
    self.window.extractFileThread()
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\main\mainWindow.py", line 197, in extractFileThread
    mainExtractTxt(args)
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\./src\main_extract_txt.py", line 70, in mainExtractTxt
    mainExtract(args, parse)
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\./src\main_extract.py", line 644, in mainExtract
    parseImp()
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\./src\main_extract_txt.py", line 57, in parse
    write() #写入
    ^^^^^^^
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\./src\main_extract_txt.py", line 23, in write
    replace()
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\./src\main_extract.py", line 406, in replace
    ret = var.replaceOnceImp(var.content, [ctrl], [trans])
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Tools\H_RPG_TOOLS\其它解包工具\SExtractor的GalGame脚本提取和导入文本工具\./src\extract_CSV.py", line 81, in replaceOnceImp
    strOld = content.iat[contentIndex, colIndex + writeOffset]
             ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\li\.conda\envs\python311\Lib\site-packages\pandas\core\indexing.py", line 2527, in __getitem__
    return self.obj._get_value(*key, takeable=self._takeable)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\li\.conda\envs\python311\Lib\site-packages\pandas\core\frame.py", line 4199, in _get_value
    series = self._ixs(col, axis=1)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\li\.conda\envs\python311\Lib\site-packages\pandas\core\frame.py", line 3996, in _ixs
    label = self.columns[i]
            ~~~~~~~~~~~~^^^
  File "C:\Users\li\.conda\envs\python311\Lib\site-packages\pandas\core\indexes\base.py", line 5389, in __getitem__
    return getitem(key)
           ^^^^^^^^^^^^
IndexError: index 7 is out of bounds for axis 0 with size 5
--------------------------------------------------------------------------
异常中断文件名: 00000001.csv
运行时间:0.039 秒

怎么把JSON的key值正确导入到CSV的Translated text这个第五列?我把writeOffset改5或4都是报错的,删掉分隔符后是不报错了,但4或5翻译没有导入到CSV

satan53x commented 7 months ago

writeOffset是写入时的偏移,你原文位置右边一列就是译文位置,writeOffset=1

allrobot commented 7 months ago

writeOffset是写入时的偏移,你原文位置右边一列就是译文位置,writeOffset=1

22_search=^([\s\S]+)$
extraData=^Original text$
writeOffset=1
sample=<不要启用纯文本模式>

导入后没有任何变化,加分隔符⚔就搞定了……

用起来太麻烦,建议下次添加几个使用示例gif吧……

satan53x commented 7 months ago

按理说和分隔符没有关系啊,也没有添加分隔符,都是整句提取的。 和其他引擎提取一样的啊,除了写入的时候偏移一列,没有不同,还需要啥操作?

allrobot commented 7 months ago

explorer_TUHhcvpVeN

satan53x commented 7 months ago

你这是匹配到空字符串了,分隔符肯定不能为空啊,不然就会全部分割成单字。 你就用原本的\r\n也行。没有分隔需求就不要改动它。