web-dev-qa-db-fra.com

Python - Lire la deuxième colonne du fichier

Mon fichier d'entrée a deux colonnes. J'essaie d'imprimer la deuxième colonne de inputdata1.txt dans un délai d'une seconde pour la boucle. Mais mon code ne fonctionne pas. Quelqu'un peut-il me dire que dois-je faire?

7
user1251265
with open('inputdata1.txt') as inf:
    for line in inf:
        parts = line.split() # split line into parts
        if len(parts) > 1:   # if at least 2 parts/columns
            print parts[1]   # print column 2

Cela suppose que les colonnes sont séparées par des espaces.

Fonction split () peut spécifier différents séparateurs. Par exemple, si les colonnes étaient séparées par des virgules ,, vous utiliseriez line.split(',') dans le code ci-dessus.

REMARQUE: Utiliser with pour ouvrir votre fichier le ferme automatiquement lorsque vous avez terminé ou si vous rencontrez un exception .

12
Levon

Vous pouvez faire quelque chose comme ça. Separator est le caractère que votre fichier utilise pour séparer les colonnes, par exemple. des tabulations ou des virgules.

for line in open("inputfile.txt"):
    columns = line.split(separator)
    if len(columns) >= 2:
        print columns[1]
7
Junuxx

Quick 'n dirty

Si AWK est installé:

# $2 for the second column
os.system("awk '{print $2}' inputdata1.txt")

Utilisation d'une classe

Faire un cours:

class getCol:
    matrix = []
    def __init__(self, file, delim=" "):
        with open(file, 'rU') as f:
            getCol.matrix =  [filter(None, l.split(delim)) for l in f]

    def __getitem__ (self, key):
        column = []
        for row in getCol.matrix:
            try:
                column.append(row[key])
            except IndexError:
                # pass
                column.append("")
        return column

Si inputdata1.txt ressemblerait à ceci:

 hel Lo WOR Ld 
 WOR LD hel Lo 

Vous obtiendriez ceci:

print getCol('inputdata1.txt')[1]
#['lo', 'ld']

Notes complémentaires

  • Vous pouvez utiliser pyawk pour plus de fonctionnalités awk
  • Si vous utilisez la méthode Quick 'n dirty, utilisez subprocess.Popen
  • Vous pouvez changer le délimiteur getCol('inputdata1.txt', delim=", ")
  • Utilisez filter pour supprimer les valeurs vides ou supprimer le commentaire pass
5
Mehdi Nellen
f = open("file_to_read.txt") # open your file

line = f.readline().strip() # get the first line in line

while line: # while a line exists in the file f
    columns = line.split('separator') # get all the columns
    while columns: # while a column exists in the line
        print columns # print the column
    line = f.readline().strip() # get the next line if it exists

Avec ce code, vous avez accès à toutes les colonnes de chaque ligne.

0
Youssef Tamaaz