2013-07-05 5 views
0

Je prends une entrée d'un fichier texte et j'essaie de diviser le texte à chaque fois qu'il rencontre le caractère "\ n", mais il ne divise rien. Je l'ai essayé sur les onglets et les espaces et cela fonctionne parfaitement. Pour une raison quelconque, cela ne fonctionne pas avec le caractère de nouvelle ligne. Cela a-t-il quelque chose à voir avec la façon dont j'obtiens la chaîne? Je passe le fichier dans le programme. Quand je donne les mêmes lignes de code un essai sur IDLE cela fonctionne bien.Utilisation de la méthode .split() en python

t= input("input string : ") 
... 


tps = t.split('\n') 
print(tps) 
+1

était le fichier créé sur une machine Windows? Si tel est le cas, les terminaisons de ligne sont susceptibles de '' \ r \ n'' –

Répondre

0

Pour diviser une chaîne multi-ligne sur les nouvelles lignes, vous utilisez normalement str.splitlines() à la place, qui gère différentes conventions newline:

>>> 'Test\r\nlines\nall mixed\r'.splitlines() 
['Test', 'lines', 'all mixed'] 

Notez que input() seulement vous donne la première ligne en tout Cas; pour l'entrée multi-ligne, vous voulez probablement lire sys.stdin à la place:

for line in sys.stdin: 
    # handle a line 

ou lignes de lecture en boucle:

while True: 
    line = input() 
+1

Le fractionnement sur '\ n' serait encore divisé, mais l'OP dit" il ne divise rien ". – RichieHindle

+0

@RichieHindle: Elle ne serait pas divisée si '\ r' est utilisé. Peu probable, je vous l'accorde, mais quand même. –

+1

Vous auriez besoin d'une machine à remonter le temps (ou d'une boîte MacOS <= 9, selon ce qui est le plus difficile à trouver). :-) – RichieHindle

3

input() ligne ne lit qu'un seul. Vous devez exécuter dans une boucle, la lecture d'une ligne à la fois:

try: 
    while True: 
     t = input("input string : ") # Or raw_input for Python 2 
     print t.replace('e', 'X') 
except EOFError: 
    pass 

Exécuter cet exemple comme python x.py < x.py et les imprime:

input string : try: 
input string :  whilX TruX: 
input string :   t = raw_input("input string : ") 
input string :   print t.rXplacX('X', 'X') 
input string : XxcXpt EOFError: 
input string :  pass 
input string : 
+0

vraiment c'est la réponse? !! –

+0

@GrijeshChauhan: Pourquoi ce ne serait pas? –

+0

@MartijnPieters effectivement ma question est à OP –