Habituellement, vous ouvrez le fichier d'entrée et écrivez les lignes non vides dans un second fichier :
with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile:
for line in infile:
if line.strip():
outfile.write(line)
Si vous souhaitez filtrer le fichier en place, vous pouvez utiliser FileInput
avec le inplace
choix :
import fileinput
for line in fileinput.FileInput("infile", inplace=1):
if line.strip():
print line
cependant, cela utilise un fichier intermédiaire et peut ne pas fonctionner dans des situations d'espace disque insuffisant.
Pour filtrer le fichier sur place sans allouer d'espace disque supplémentaire, vous pouvez essayer quelque chose comme ceci :
with open('file.tsv', 'r+') as infile:
read_pos = write_pos = 0
line = infile.readline()
while line:
read_pos += len(line)
if line.strip():
infile.seek(write_pos)
infile.write(line)
write_pos += len(line)
infile.seek(read_pos)
line = infile.readline()
# update file size to the new, possibly reduced, size
infile.truncate(write_pos)