Имена файлов Python как ключи словаря
Я хотел бы создать словарь "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)
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)