web-dev-qa-db-fra.com

Lecture de colonnes spécifiques à partir d'un fichier texte en python

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? 

14
Jethro

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]
8
Adam Smith

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')
4
Kasrâmvd

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']
2
ZdaR

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.])
1
aerobiomat

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])
0
Stephan Scherodinger