2010-07-30 8 views
2

Comment puis-je écrire un script python pour diviser un nom de fichierdiviser un nom de fichier

par exemple

LN0001_07272010_3.dat 

et de renommer le fichier à LN0001_JY_07272010?

comment puis-je placer un '|' et la fin de chaque ligne dans ce fichier (contenu) chaque ligne est un enregistrement?

+4

Ce sont deux questions distinctes, et vous devriez les poser séparément. –

+0

La question est vraiment de diviser une chaîne, que les réponses ont couvert. Cependant, le titre me conduirait à des choses comme [os.path.split()] (http://docs.python.org/library/os.path.html#os.path.split), qui fonctionne différemment. – GreenMatt

+2

Probablement la meilleure réponse à cette question serait "lire un tutoriel d'introduction Python". Pourtant, j'ai posté une réponse :-( – tokland

Répondre

2
name = "LN0001_07272010_3.dat"      
parts = name.split('_') # gives you ["LN0001","07272010","3.dat"]  
newname = parts[0] + "_STUFF_" + parts[1] ... etc 

Pour renommage, vous pouvez utiliser la fonction de système de fichiers python,

Ou vous pouvez utiliser l'impression python pour cracher un ensemble de renommer les commandes pour votre système d'exploitation, la capture que d'un lot/fichier shell et APRÈS vérifier qu'il semble correct - exécutez-le.

print "mv ",name,newname # gives; mv LN0001_07272010_3.dat LN0001_JY_07272010 
+0

merci, fonctionne très bien – user396123

+0

la solution de jesse avec le {0} est plus simple - mais avec un script, il est souvent préférable d'avoir simple et lisible –

+0

si vous le trouvez illisible alors vous devriez vous familiariser avec cette syntaxe: c'est la solution de formatage de chaîne préférée à partir de Python 3 http://www.python.org/dev/peps/pep-3101/ –

4
fn = "LN0001_07272010_3.dat".split('_') 
new_fn = '{0}_JY_{1}'.format(fn[0], fn[1]) 

Mise à jour a oublié d'ajouter "JY" à new_fn

+0

Le nom "_JY_" n'est pas ajouté au nouveau nom – GreenMatt

+0

@GreenMatt, merci t. –

2
filename="LN0001_07272010_3.dat" 
newfilename=filename.split("_")[0]+"_JY_"+filename.split("_")[1] 

linearr=[] 
for line in open(filename).readlines(): 
    linearr.append(line+"|") 

f=open(newfilename, "w") 
for line in linearr: 
    f.write(line) 
f.close() 
0

Car, est ici en place les opérations sont généralement une mauvaise idée un code qui crée un nouveau fichier laissant l'original inchangé:

fn = "LN0001_07272010_3.dat" 
fn1, fn2 = fn.split("_")[:2] 
new_fn = "_".join([fn1, "JY", fn2]) 
open(new_fn, "w").writelines(line.rstrip()+"|\n" for line in open(fn)) 
+0

Probablement mauvais choix si LN0001_07272010_3.dat est un fichier de base de données multi-gb? –

+0

Modifier - désolé ignorer le commentaire, je pensais que vous vouliez faire une copie de ligne comme une alternative à un changement de nom. –

0
file_name = 'LN0001_07272010_3.dat' 
new_file_name = '{0}_JY_{1}'.format(file_name.split('_')[0], file_name.split('_')[1])