2010-04-13 6 views
2

J'ai un répertoire/tmp/dir avec deux types de noms de fichiersmanipulation de fichiers python

/tmp/dir/abc-something-server.log

/tmp/dir/xyz-something-server.log

..

..

et

/tmp/dir/something-client.log

Je dois ajouter quelques lignes (ces lignes sont constants) à des fichiers fin avec "client.log"

line 1

line 2

line 3

line 4

append ces quatre lignes vers des fichiers se terminent par "client.log"

Oui, j'ai trouvé open() "a" option fournira le résultat souhaité. mais comment sélectionner le fichier correct, exclure server.log et choisir client.log?

et les fichiers se terminent par « server.log »

je devais ajouter après un mot-clé dire « après cela. » Le fichier "server.log" a plusieurs entrées de "After-this" J'ai besoin de trouver la première entrée de "After-this" et d'ajouter ci-dessus les quatre lignes de garder le fichier restant tel quel.

Toute aide sera grandement appréciée :) Merci d'avance.

+0

est-il pas "insérer" au lieu de append? L'ajout d'un fichier est possible, mais insérer dans le milieu sans une sorte de copie (temporaire) n'est pas je crois. Si les fichiers sont toujours ouverts par le client ou le serveur, des choses étranges peuvent se produire lors de la copie. – extraneon

+0

oui..pour le fichier server.log il est inséré au milieu .. ne pas ajouter. aucun processus n'utilise encore ces fichiers, ce qui ne posera aucun problème. –

+0

Bonne question; clair sur ce que vous cherchez et pourquoi. –

Répondre

3

pas testé

import os,glob,fileinput 
root="/tmp" 
path=os.path.join(root,"dir") 
alines=["line 1\n","line 2\n","line 3\n","line 4\n"] 
os.chdir(path) 
# for clients 
for clientfile in glob.glob("*.client.log"): 
    data=open(clientfile).readlines() 
    data.append(alines) 
    open("temp","w").write(''.join(data)) 
    os.rename("temp",clientfile) 
for svrfile in glob.glob("*.server.log"): 
    f=0 
    for line in fileinput.FileInput(svrfile,inplace=1): 
     ind=line.find("After-this") 
     if ind!=-1 and not f: 
      line=line[:ind+10] + ''.join(alines) + line[ind+10:] 
      f=1 
     print line 
+0

Je vais le tester et vous laisser savoir l'état .. merci :) –

+0

il dit erreur de type ... comment résoudre ce problème? > open ("temp", "w") écrire ('' join (données).) > TypeError et je pense qu'il ya une faute de frappe --- est-il > ligne = ligne [:. Ind + 10] + '' .join (alist) + ligne [ind + 10:] ou > ligne = ligne [: ind + 10] + '' .join (alines) + ligne [ind + 10:] –

+0

voir modifier . 'data = data.append (alines)' devrait être juste 'data.append (alines)'. et oui, c'est une faute de frappe pour l'autre. Vous pouvez juste le tester correctement? lancez-le avec un interprète et découvrez-le. – ghostdog74