2

私はPythonが初めてで、1つの小さな課題に取り組んでいます。dict.get()Pythonでメソッドに変数を渡すときに問題が発生しています。

私が使用しているコードサンプルは次のとおりです。

inputFile = open("Result_table_file.txt")

outputFile = open("Result.txt","w")

file =  open("matadata.txt")

from collections import defaultdict
d =  defaultdict(dict)

for line in file:
    name,values = line.split(':',1)
    d[name] = values

for record in inputFile:
    recordSplit = record.split(",")
    filename = recordSplit[3]
    metadataValue = d.get(filename)
    print "FileName :" + filename
    print metadataValue
    print "Record : " + record

出力は次のとおりです。

FileName : Image01.tif
Metadata : None
Record : 100,134423.0,13911111,Image01

このコードは正常に動作します。唯一の問題は、filename変数をmetadataValue = d.get(filename)メソッドに渡すと、結果が として返されることNoneです。

何が問題なのか、どうすれば解決できるのか、誰でも教えてもらえますか。

ファイルから値を取得する代わりにファイル名変数を手動で作成するときに、私が特定したことがもう 1 つあります。正常に動作しています。

例えば ​​:

filename = "Image01" d.get(ファイル名)

ファイルの読み取り中に値を取得すると、正しい出力が得られますが、これは機能しません。

例えば

inputFile のレコード: recordSplit = record.split(",") filename = recordSplit[3] metadataValue = d.get(filename) print "FileName :" + filename print metadataValue print "Record : " + record

何か案が?

4

3 に答える 3

1

d[filename]が存在しない場合は、getを返しNoneます。

d[filename]存在しない場合にデフォルトとして返す 2 番目の引数を追加します。

In [2]: d = {'a':1, 'b':2}

In [7]: print d.get('a')
1

In [8]: print d.get('c')
None

In [9]: print d.get('c', 77)
77
于 2013-03-19T16:23:47.427 に答える
0

ここに矛盾が見られます。

によって計算されるが に等しいrecordのに100,134423.0,13911111,Image01、が に等しいことがどうして可能でしょうか?filenamerecord.split(",")[3]Image01.tif

filenameが実際に に等しくImage01.tifdにキーのエントリが含まれている場合Image01、 ではなくImage01.tif、 が得られNoneます。

誰かが示唆したように、計算する前にdandを印刷して、何が起こっているかを確認する必要があります。filenamemetadataValue

編集

OK、ファイルの行には (少なくとも私のコンピューターでは) 末尾の\n文字が含まれており、印刷時に見えない可能性があります。filename.strip()get 呼び出しの前に実行してみてください。

于 2013-03-19T18:23:48.983 に答える
0

存在しないキーで dict の get メソッドを呼び出すと、メソッドは None を返します。あなたの場合、d には filename という名前のキーがないことを意味します。問題は、 に置き換える必要があることだと思います。存在しないファイルを開いてそこから読み取り、読み取ったものを d.So d is juse None.So d にはキー名 filename がありません。

于 2013-03-19T16:36:58.137 に答える