2014-07-24 2 views
1

J'ai un fichier txt délimité par des tabulations.Suppression la plus efficace de la nième ligne de txt délimité par des tabulations

Je souhaite supprimer la nième ligne de txt délimité par des tabulations.

je vais assigner comme

n = 1 

le programme va supprimer seulement la première ligne du fichier.

Si le programme le fait sans même lire tout le fichier d'entrée, alors ce serait fantastique.

J'ai essayé d'apprendre l'un de mes questions précédentes:

Concatenate tab-delimited txt files vertically

Cette question a été concaténer verticalement deux tabulé fichiers txt. J'ai donc pensé que renverser ce processus ferait quelque chose de similaire pour moi. Mais je ne pouvais pas trouver comment le faire.

J'ai également essayé beaucoup d'autres réponses stackoverflow.

Mais ils sont la plupart du temps 'suppression des lignes qui ont une expression spécifique' plutôt que 'la suppression ligne n-ième'

(How to delete a line from a text file using the line number in python, Deleting a specific line in a file (python), Deleting a line from a file in Python)

+1

À moins que les lignes sont de la même longueur, lire toutes les lignes et imprimer tous, sauf celui que vous souhaitez supprimer. – tripleee

+1

duplication possible de [Comment supprimer une ligne d'un fichier texte en utilisant le numéro de ligne en python] (http://stackoverflow.com/questions/17747522/how-to-delete-a-line-from-a-text- fichier-using-the-line-number-in-python) – tripleee

+0

@tripleee Bien que le titre de cette question indique à propos de la suppression en utilisant le numéro de ligne, cette question n'est pas réellement. Cette question attribue explicitement "phrase = 'le chien aboya'" et supprime des lignes avec cette phrase. – user3123767

Répondre

1

Vous pouvez utiliser itertools.islice pour cela. Ici pas Python-boucle est impliqué, il devrait être rapide:

from itertools import islice 

n = 4 
with open('file.txt') as f, open('out.txt', 'w') as out: 
    out.writelines(islice(f, n-1)) #write the lines before the nth line 
    out.writelines(islice(f, 1, None)) #write the rest of the lines except nth 
+0

Ne devrait-il pas y avoir un «n» au lieu du «1» dans votre dernière ligne? – igor

+1

@igor Non, il devrait être '1' car l'objet du fichier est déjà découpé en tranches de (n-1) ligne. Maintenant nous devons commencer à partir du 2ème index (1) pour ignorer la ligne nième. –

1
lineToRemove = 7 

f = open("yourfile.txt","r") 
lines = f.readlines() 
f.close() 

f = open("yourfile.txt","w") 
linesInFile = 0 
for line in lines: 
    linesInFile = linesInFile + 1 
    if linesInFile != lineToRemove: 
     f.write(line) 
f.close() 

Edit: En utilisant del et en omettant explicite open et close nous pouvons réduire le code:

lines = file("yourfile.txt", "r").readlines() 
del lines[6] 
file("yourfile.txt", "w").writelines(lines) 

Veuillez noter que del lines[6] supprime la 7ème ligne car l'index commence par zéro. Alors, voici une fonction pratique que nous pourrions utiliser:

def deleteLine(filename, lineToRemove): 
    lines = file(filename, "r").readlines() 
    del lines[lineToRemove-1] 
    file(filename, "w").writelines(lines) 
+0

Merci! Cela fonctionne parfaitement. Cependant, ce programme lit-il le fichier d'entrée entier? Les lignes du fichier d'entrée ont la même longueur. En d'autres termes, toutes les lignes ont le même nombre de colonnes. Alors est-il possible de ne pas lire toutes les lignes et de supprimer la ligne n? – user3123767

+0

En quoi est-ce efficace? –

Questions connexes