2012-06-20 10 views
7

Mój plik wejściowy ma dwie kolumny. Próbuję wydrukować drugą kolumnę inputdata1.txt w ciągu drugiej pętli for. Ale mój kod nie działa. Czy ktoś może mi powiedzieć, co powinienem zrobić?Python - Czytaj drugą kolumnę z pliku

+2

Czy możesz pokazać kod? – jsalonen

+4

Powinieneś pokazać kod, który "_is is working_" i wyjaśnić, co "_is not working_" oznacza bardziej szczegółowo. – Tadeck

+2

Dodatkowo możesz wyjaśnić, w jaki sposób kolumny są oddzielone w pliku inputdata1.txt – dckrooney

Odpowiedz

7

Możesz zrobić coś takiego. Separator to znak używany przez twój plik do rozdzielania kolumn, np. karty lub przecinki.

for line in open("inputfile.txt"): 
    columns = line.split(separator) 
    if len(columns) >= 2: 
     print columns[1] 
11
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 

Zakłada się, że kolumny są oddzielone odstępami.

Funkcja split() może określić różne separatory. Na przykład, jeśli kolumny były oddzielone przecinkami ,, użyłbyś kodu line.split(',') w powyższym kodzie.

UWAGA: Korzystanie with otworzyć plik automatycznie zamyka to gdy skończysz, lub w przypadku wystąpienia wyjątek.

+0

'.strip() 'jest zbędny, jeśli następuje po nim' line.split() ' –

5

Szybkie „n brudny

Jeśli AWK jest zainstalowany:

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

Korzystanie klasę

Zrób Klasa:

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 

Jeśli inputdata1.txt wyglądałby następująco:

 
hel lo wor ld 
wor ld hel lo 

co można uzyskać to:

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

Dodatkowe noty

  • Można użyć pyawk więcej funkcji awk
  • Jeśli używasz szybkiej obsługi „n metoda brudną korzystanie subprocess.Popen
  • Można zmienić separator getCol('inputdata1.txt', delim=", ")
  • Zastosowanie filter usunąć puste wartości lub Odkomentuj pass
0
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 

Z tym kodem, masz dostęp do wszystkich kolumn każdej linii.