J'ai un fichier texte qui contient une table composée de nombres, par exemple:
5 10 6
6 20 1
7 30 4
8 40 3
9 23 1
4 13 6
si, par exemple, je veux que les nombres ne figurent que dans la deuxième colonne, comment puis-je extraire cette colonne dans une liste?
Vous avez un fichier délimité par des espaces, utilisez donc le module conçu pour la lecture de fichiers de valeurs délimitées, csv
.
import csv
with open('path/to/file.txt') as inf:
reader = csv.reader(inf, delimiter=" ")
second_col = list(Zip(*reader))[1]
# In Python2, you can omit the `list(...)` cast
Le modèle Zip(*iterable)
est utile pour convertir des lignes en colonnes et inversement. Si vous lisez un fichier par rangée ...
>>> testdata = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
>>> for line in testdata:
... print(line)
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
... mais vous avez besoin de colonnes, vous pouvez passer chaque ligne à la fonction Zip
>>> testdata_columns = Zip(*testdata)
# this is equivalent to Zip([1,2,3], [4,5,6], [7,8,9])
>>> for line in testdata_columns:
... print(line)
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
Vous pouvez utiliser une fonction Zip
avec une liste comprenant:
with open('ex.txt') as f:
print Zip(*[line.split() for line in f])[1]
résultat :
('10', '20', '30', '40', '23', '13')
Tout d’abord, nous ouvrons le fichier et, comme datafile
, nous appliquons la méthode .read()
, puis nous lisons le contenu du fichier, puis nous scindons les données, ce qui renvoie quelque chose du genre: ['5', '10', '6', '6', '20', '1', '7', '30', '4', '8', '40', '3', '9', '23', '1', '4', '13', '6']
. ignorer les 3 éléments suivants jusqu'à la fin de la boucle.
with open("sample.txt", "r") as datafile:
print datafile.read().split()[1::3]
Sortie:
['10', '20', '30', '40', '23', '13']
Je sais que c’est une vieille question, mais personne n’a mentionné que, lorsque vos données ressemblent à un tableau, numpy's loadtxt est pratique:
>>> import numpy as np
>>> np.loadtxt("myfile.txt")[:, 1]
array([10., 20., 30., 40., 23., 13.])
Cela peut aider:
import csv
with open('csv_file','r') as f:
# Printing Specific Part of CSV_file
# Printing last line of second column
lines = list(csv.reader(f, delimiter = ' ', skipinitialspace = True))
print(lines[-1][1])
# For printing a range of rows except 10 last rows of second column
for i in range(len(lines)-10):
print(lines[i][1])