入力ファイルには2つの列があります。 inputdata1.txt
の2番目の列を2番目のforループ内に出力しようとしています。しかし、私のコードは機能していません。誰かが私に何をすべきか教えてもらえますか?
_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
を使用してファイルを開く自動的に閉じる完了したとき、または例外が発生した場合。
あなたはこのようなことをすることができます。 Separator
は、ファイルが列を区切るために使用する文字です。例:タブまたはコンマ。
for line in open("inputfile.txt"):
columns = line.split(separator)
if len(columns) >= 2:
print columns[1]
クイック '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
を使用できますsubprocess.Popen
_を使用しますgetCol('inputdata1.txt', delim=", ")
filter
を使用して、空の値を削除するか、pass
のコメントを解除します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
このコードを使用すると、各行のすべての列にアクセスできます。