2012-10-13 1 views
0

Question: J'ai quelques problèmes avec mes anciens scripts qui ne fonctionnent pas sur Python 3.xLearning Python, scripts pour d'autres projets

Offtopic; Quelle est la flexibilité de Python lorsque vous tentez d'accéder à des fichiers binaires et texte pour renommer en masse, renuméroter? dans les archives de Collision et IMG?

Je n'ai plus la meilleure compréhension de cela car je suis allé dans le sens de Level design en utilisant 3dsmax.

Quoi qu'il en soit ..

Erreur:

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 

code:

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]) 

Partant simple:

Ce que j'essaie de faire est d'analyser un fichier texte ide en changeant les nombres dans l'ordre d'énumération.

Syntaxe serait SOL_rem.py game.ide 1845 game2.ide

fichier Exemple:

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 

Les ID seraient réajustés de 1845 dans l'ordre croissant.

+2

Quelle est la version de Python? Et qu'est-ce que cette erreur a à voir avec la façon dont Python est "flexible"? –

+0

Si vous utilisez les outils fournis avec Python (comme say, le module ['csv'] (http://docs.python.org/library/csv.html), c'est encore plus flexible. –

Répondre

0

En python3, vous pouvez le faire

from functools import reduce 

Et même dans python2.6 + le devriez être bien plus haut, mais pas obligatoire.

Oui. Python est totalement flexible pour tout ce que vous voulez faire. Comme les builtins prioritaires aussi.

+0

Oh n'a pas remarqué ça. Il utilise Python3. –

+0

Merci, essayer ceci sans succès. –

+0

2.6 les scripts ont bien fonctionné, j'aurais pu faire un meilleur travail comme juste entrer le numéro de l'ID désiré et un demandeur de fichier pour choisir le fichier source et dest. –

2

reduce est plus dans l'espace de noms builtin en Python 3.

Au lieu d'utiliser reduce, pourquoi ne pas simplement utiliser un join?

ide_line = ','.join(ide_line) + '\n' 
+0

Fichier "C: \ SOL_REM.py", ligne 27 process_ide (sys.argv [1], int (sys.argv [2]), sys.argv [3]) sys - ceci est le résultat de l'ajout depuis functools import réduire –

+0

Pourquoi n'ajoutez-vous pas cette traceback à votre question? – nneonneo