私は独特の問題に直面しています。以下で簡単に説明します。このコードがあるとします-
class MyClass:
__postBodies = []
.
.
.
for the_file in os.listdir("/dir/path/to/file"):
file_path = os.path.join(folder, the_file)
params = self.__parseFileAsText(str(file_path)) #reads the file and gets some parsed data back
dictData = {'file':str(file_path), 'body':params}
self.__postBodies.append(dictData)
print self.__postBodies
dictData = None
params = None
問題は、異なるファイルの params と dictData を毎回印刷すると、値が異なります (正しいことです) が、追加が発生するとすぐに __postBodies を印刷すると、奇妙なことが起こります。3 つのファイルがある場合、A、B、C と仮定すると、
初めて __postBodies に content = [{'body':{A dict with some data related to file A}, 'file':'path/of/A'}] がある
2 回目 = [{'body':{ファイル B に関連するデータを含む dict}, 'file':'path/of/A'}, {'body':{ファイルに関連するデータを含む dict} B}, 'ファイル':'path/of/B'}]
AND 3 回目 = [{'body':{A dict with some data related to file C}, 'file':'path/of/A'}, {'body':{A dict with some data related to file C}, 'file':'path/of/A'}, {'body':{A dict with some data related to file C} }, 'file':'path/of/B'}, {'body':{ファイル C に関連するデータを含む辞書}, 'file':'path/of/C'}]
したがって、「file」キーが非常にうまく機能していることがわかります。奇妙なことに、「body」キーは、最後に追加されたすべてのエントリで上書きされています。
私は間違いを犯していますか?何かしなければならないことはありますか?方向を教えてください。
よくわからない場合は申し訳ありません。
編集 - - - - - - - - - - - -
self.__parseFileAsText(str(file_path)) 呼び出しからの戻り値は、dictData に「本文」として挿入する辞書です。
EDIT2 ----------------------------
あなたが尋ねたように、これはコードですが、私は params = self.__parseFileAsText(str(file_path)) 呼び出しが毎回差分辞書を返すことを確認しました。
def __parseFileAsText(self, fileName):
i = 0
tempParam = StaticConfig.PASTE_PARAMS
tempParam[StaticConfig.KEY_PASTE_PARAM_NAME] = ""
tempParam[StaticConfig.KEY_PASTE_PARAM_PASTEFORMAT] = "text"
tempParam[StaticConfig.KEY_PASTE_PARAM_EXPIREDATE] = "N"
tempParam[StaticConfig.KEY_PASTE_PARAM_PRIVATE] = ""
tempParam[StaticConfig.KEY_PASTE_PARAM_USER] = ""
tempParam[StaticConfig.KEY_PASTE_PARAM_DEVKEY] = ""
tempParam[StaticConfig.KEY_PASTE_FORMAT_PASTECODE] = ""
for line in fileinput.input([fileName]):
temp = str(line)
temp2 = temp.strip()
if i == 0:
postValues = temp2.split("|||")
if int(postValues[(len(postValues) - 1)]) == 0 or int(postValues[(len(postValues) - 1)]) == 2:
tempParam[StaticConfig.KEY_PASTE_PARAM_NAME] = str(postValues[0])
if str(postValues[1]) == '':
tempParam[StaticConfig.KEY_PASTE_PARAM_PASTEFORMAT] = 'text'
else:
tempParam[StaticConfig.KEY_PASTE_PARAM_PASTEFORMAT] = postValues[1]
if str(postValues[2]) != "N":
tempParam[StaticConfig.KEY_PASTE_PARAM_EXPIREDATE] = str(postValues[2])
tempParam[StaticConfig.KEY_PASTE_PARAM_PRIVATE] = str(postValues[3])
tempParam[StaticConfig.KEY_PASTE_PARAM_USER] = StaticConfig.API_USER_KEY
tempParam[StaticConfig.KEY_PASTE_PARAM_DEVKEY] = StaticConfig.API_KEY
else:
tempParam[StaticConfig.KEY_PASTE_PARAM_USER] = StaticConfig.API_USER_KEY
tempParam[StaticConfig.KEY_PASTE_PARAM_DEVKEY] = StaticConfig.API_KEY
i = i+1
else:
if tempParam[StaticConfig.KEY_PASTE_FORMAT_PASTECODE] != "" :
tempParam[StaticConfig.KEY_PASTE_FORMAT_PASTECODE] = str(tempParam[StaticConfig.KEY_PASTE_FORMAT_PASTECODE])+"\n"+temp2
else:
tempParam[StaticConfig.KEY_PASTE_FORMAT_PASTECODE] = temp2
return tempParam