0

質問: Python 3.x で動作しない古いスクリプトで問題が発生しています。

オフトピック; 大量の名前変更や再番号付けのためにバイナリ ファイルやテキスト ファイルにアクセスしようとするとき、Python はどの程度柔軟ですか? Collision および IMG アーカイブ内で?

私は 3dsmax を使用してレベル デザインの方向に進んだので、これについてはもうよく理解していません。

ともかく..

エラー:

Traceback (most recent call last):
  File "C:\SOL_REM.py", line 26, in <module>
    process_ide(sys.argv[1], int(sys.argv[2]),
  File "C:\SOL_REM.py", line 18, in process_ide
    ide_line = reduce(lambda x,y: str(x)+","+st
NameError: global name 'reduce' is not defined

コード:

import sys

if len(sys.argv) < 4:
    sys.exit('Usage: Source ide | ID number | Dest ide filename.' sys.argv[0])

def process_ide(ide_source, num, ide_destination):
    src = open(ide_source,'r')
    dst = open(ide_destination,'w')

    for line in src:
        ide_line = line

        if not (line == "" or line[0]=="#" or len(line.split(",")) < 2):
            ide_line = line.split(",")
            ide_line[-1] = ide_line[-1][:-2]
            ide_line[0] = num
            num+=1
            ide_line = reduce(lambda x,y: str(x)+","+str(y), ide_line)+"\n"

        dst.write(ide_line)

    src.close()
    dst.close()


process_ide(sys.argv[1], int(sys.argv[2]), sys.argv[3])

簡単に始める:

私がやろうとしているのは、数字を列挙順に変更してideテキストファイルを解析することです。

構文は SOL_rem.py game.ide 1845 game2.ide になります。

サンプルファイル:

ID    Modelname     TexName       Rendering flags.

objs
1700, ap_booth2_03, ap_airstuff1, 1, 190, 0
1701, ap_seaplaland1, ap_seasplane, 1, 299, 0
1702, ap_seaplanehanger1, ap_seasplane, 1, 299, 0
1703, ap_termwindows1, ap_termwindows, 1, 299, 4
1704, ap_blastdef_01, ap_newprops1opac, 1, 299, 4
1705, ap_blastdef_03, ap_newprops1opac, 1, 299, 4
1706, air_brway_030, airgrndb, 1, 299, 0
end

ID は 1845 から昇順に再調整されます。

4

2 に答える 2

2

reducePython3の組み込み名前空間には含まれなくなりました。

を使用する代わりにreduce、なぜ単に使用しないのjoinですか?

ide_line = ','.join(ide_line) + '\n'
于 2012-10-13T15:35:24.803 に答える
0

Python3では、次のことができます

from functools import reduce

また、Python2.6+ でも上記は問題ないはずですが、必須ではありません。

はい。Python は、やりたいことに対して完全に柔軟です。ビルトインのオーバーライドも同様です。

于 2012-10-13T15:30:14.230 に答える