web-dev-qa-db-ja.com

Python-ファイルから2番目の列を読み取ります

入力ファイルには2つの列があります。 inputdata1.txtの2番目の列を2番目のforループ内に出力しようとしています。しかし、私のコードは機能していません。誰かが私に何をすべきか教えてもらえますか?

8
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
_

これは、列が空白で区切られていることを前提としています。

関数 split() は異なるセパレーターを指定できます。たとえば、列がコンマ_,_で区切られている場合、上記のコードではline.split(',')を使用します。

注:withを使用してファイルを開く自動的に閉じる完了したとき、または例外が発生した場合。

12
Levon

あなたはこのようなことをすることができます。 Separatorは、ファイルが列を区切るために使用する文字です。例:タブまたはコンマ。

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

クイック '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']
_

追記

  • より多くのawk機能には pyawk を使用できます
  • クイック 'nダーティメソッドを使用している場合は、_subprocess.Popen_を使用します
  • 区切り文字を変更できますgetCol('inputdata1.txt', delim=", ")
  • filterを使用して、空の値を削除するか、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

このコードを使用すると、各行のすべての列にアクセスできます。

0
Youssef Tamaaz