0

ドライブまたはフォルダーの解析中に、ファイル統計を含むオブジェクトを含む辞書「file_stats」を作成したいと考えています。
このディクショナリのキーとしてパスとファイル名の組み合わせを使用します
。オブジェクトには「addScore」というメソッドがあります。
私の問題は、ファイル名に「-」などの文字が含まれていることがあり、これらのエラーにつながることです。

Error: Yara Rule Check error while checking FILE: C:\file\file-name Traceback (most recent call last):
File "scan.py", line 327, in process_file
addScore(filePath)
File "scan.py", line 393, in addScore
file_stats[filePath].addScore(score)
AttributeError: 'int' object has no attribute 'addScore'

ファイル名を辞書のキーとして使用して、ファイルが既に辞書にあるかどうかをすばやく確認できるようにしました。

ファイルパスを辞書キーとして使用するという考えを却下する必要がありますか、それとも文字列をエスケープする簡単な方法はありますか?

file_stats = {}
for root, directories, files in os.walk (drive, onerror=walkError, followlinks=False):
    filePath = os.path.join(root,filename)
    if not filePath in file_stats:
        file_stats[filePath] = FileStats()
        file_stats[filePath].addScore(score)
4

1 に答える 1

1

ここでわかるように、この問題は、質問へのコメントで @pztrick が指摘したようなものです。

>>> class StatsObject(object):
...     def addScore(self, score):
...         print score
...
>>> file_stats = {"/path/to-something/hyphenated": StatsObject()}
>>> file_stats["/path/to-something/hyphenated"].addScore(10)
>>> file_stats["/another/hyphenated-path"] = 10
10
>>> file_stats["/another/hyphenated-path"].addScore(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'addScore'

この最小限の例はあなたのために機能しますか(おそらく異なる開始パスで)

import os

class FileStats(object):
    def addScore(self, score):
        print score

score = 10
file_stats = {}
for root, directories, files in os.walk ("/tmp", followlinks=False):
    for filename in files:
        filePath = os.path.join(root,filename)
        if not filePath in file_stats:
            file_stats[filePath] = FileStats()
            file_stats[filePath].addScore(score)
于 2013-05-07T14:53:04.210 に答える