2011-03-03 2 views
1

comment puis-je préserver la structure du fichier après la substitution.Python ajoutant une nouvelle ligne à la fin de chaque ligne

# -*- coding: cp1252 -*- 


import os 
import os.path 
import sys 
import fileinput 

path="C:\\Search_replace" # insert the path to the directory of interest 
#os.path.exists(path) 
#raise SystemExit 
Abspath=os.path.abspath(path) 
print(Abspath) 
dirList=os.listdir(path) 
print ('seaching in',os.path.abspath(path)) 
for fname in dirList: 
    if fname.endswith('.txt') or fname.endswith('.srt'): 
     #print fname 
     full_path=Abspath+"\\"+fname 
     print full_path 
     for line in fileinput.FileInput(full_path,inplace=1): 
      line = line.replace("þ","t") 
      line=line.replace("ª","S") 
      line=line.replace("º","s") 
      print line 
print "done" 
+0

Uhhhh ... . quelle? – rossipedia

Répondre

3

Au lieu de print line dans la ligne de fileinput, faire un sys.stdout.write(line) à la fin. Et n'utilisez pas d'imprimante dans les autres endroits de la boucle.

Au lieu d'utiliser fileinput pour mot remplacer, vous pouvez utiliser cette méthode simple pour la substitution de mot

import shutil 
o = open("outputfile","w") #open an outputfile for writing 
with open("inputfile") as infile: 
    for line in infile: 
    line = line.replace("someword","newword") 
    o.write(line + "\n") 
o.close() 
shutil.move("outputfile","inputfile") 
+0

La virgule remplacera seulement le retour à la ligne avec un espace. –

+0

@Ignacio - correct. Édité pour utiliser sys.stdout.write –

+0

PS: [La virgule à la fin de l'impression pour supprimer le saut de ligne ne fonctionnera pas dans Python 3] (http://www.ferg.org/projects/python_gotchas.html#table_of_contents_4). sys.stdout.write est le meilleur. – smci

3

La question est grande dans le département de la clarté, mais si vous voulez Python pour imprimer des choses à la norme sans une nouvelle ligne à la fin, vous pouvez utiliser sys.stdout.write() au lieu de print().

Si vous souhaitez effectuer une substitution et l'enregistrer dans un fichier, vous pouvez faire ce que Senthil Kumaran a suggéré.

0

Lorsque vous itérer les lignes du fichier avec

for line in fileinput.FileInput(full_path,inplace=1) 

le line contiendra les données de la ligne y compris le caractère de saut de ligne si ce n'est pas la dernière ligne. Donc, en général dans ce genre de modèle que vous voulez, soit dépouiller les espaces supplémentaires avec

line = line.rstrip() 

ou les imprimer sans ajouter votre propre saut de ligne (comme print DOE) en utilisant

sys.stdout.write(line) 
Questions connexes