2012-06-20 376 views
7

我的輸入文件有兩列。我試圖在第二個for循環內打印第二列inputdata1.txt。但我的代碼不起作用。有人可以告訴我該怎麼辦?Python - 從文件中讀取第二列

+2

你能展示一些代碼嗎? – jsalonen

+4

您應該顯示「_is not working_」的代碼並解釋「_is not working_」的含義。 – Tadeck

+2

此外,您可能想要解釋如何在inputdata1.txt中分隔列。 – dckrooney

回答

7

你可以做這樣的事情。 Separator是您的文件用於分隔柱的字符,例如標籤或逗號。

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 

這假定列由空格分開。

功能split()可以指定不同的分隔符。例如,如果列以逗號分隔,,則在上面的代碼中使用line.split(',')

注:使用with打開文件自動關閉它當您完成,或者如果你遇到例外

+0

'行。如果strip()的後面跟着'line.split()',它就是多餘的 –

5

快速「N髒

如果安裝AWK:

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

使用類

使類:

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 

如果inputdata1.txt會是什麼樣子:

 
hel lo wor ld 
wor ld hel lo 

你會得到這樣的:

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

其他注意事項

  • 可以使用pyawk更多awk的功能
  • 如果你使用快速「N髒方法使用subprocess.Popen
  • 您可以更改分隔符getCol('inputdata1.txt', delim=", ")
  • 使用filter刪除空值或取消註釋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 

有了這個代碼,您可以訪問每行的所有列。