2017-10-13 12 views
-1

encore assez nouveau pour Python ..Python 2.7 imprimer avec de nouvelles lignes non intentionnelles

J'itérer un fichier texte:

0x000B000A 
0x000B000B 
0x000B000C 

Et annexant chaque ligne à une URL de base et est spécifique ici une partie du code que je vais avoir un problème avec:

def ProcessID(id): 
    url = baseUrl + "/" + id + "/" + type + "-" + id + "-" + version + "." + extension 
    print "Processing: " + url 

for line in inputFile: 
     ProcessID(line) 

le problème est que toutes les lignes se terminant par A ou B ajoute un saut de ligne dans la commande d'impression:

Processing: http://example.com/0x000B000A 
/LST3-0x000B000A 
-000000.ext 
Processing: http://example.com/0x000B000B 
/LST3-0x000B000B 
-000000.ext 
Processing: http://example.com/0x000B000C/LST3-0x000B000C-000000.ext 

Qu'est-ce que je fais mal ici? Est-ce que cela a quelque chose à voir avec la façon dont Python interprète la chaîne (c'est-à-dire dans Unicode 0A, 0B)?

Merci, PJ

Répondre

3

Lorsque itérer sur les lignes dans un fichier comme ça, les lignes contiendront encore la linebreak finale '\n' (sauf la dernière ligne s'il n'y a pas de ligne vide après). Il est plus facile de les enlever:

for line in inputFile: 
     ProcessID(line.strip()) 
     # OR: if you want to be more explicit and keep all other white space 
     ProcessID(line.rstrip('\n')) 
+0

Ah! Excellent merci. Je n'étais pas au courant de ça. –

+0

ne pouvons-nous pas utiliser 'replace' aussi bien? –

+1

@VanPeer Bien sûr, car une ligne dans ce contexte ne peut contenir qu'un seul saut de ligne. Mais j'irais avec 'strip' parce que c'est plus spécifique (et n'a pas à chercher dans toute la ligne). – schwobaseggl

0

Vous insérez toute la ligne, avec sa rupture. Vous devriez le retirer de chaque ligne. Vous pouvez le faire line.replace("\n", "")