私はPythonでFileSystemのようなものを作ろうとしています。私の目標は、いくつかのファイルを含むことができるいくつかのデータとディレクトリを含むことができるファイルを作ることです。 :その後、私はいくつかの簡単なコマンドだから、奇妙なKeyError || Python3.6.1
CD
LS
mk_dir
mk_file
を持って、今、私はこれで問題を抱えていますそこにはDirectoryBaseクラスがありますParentDir(ファイル/ディレクトリが保存されているディレクトリ)がないため、Directoryとは異なります。次に、DirectoryBaseを拡張し、path()メソッド(pathをfile/dirに返すメソッド)を上書きするDirectoryクラスがあり、data dictには別のデフォルトのキー '..'がありますが、データ辞書で見つけようとしているときにKeyErrorが発生します。別の奇妙なことは、ファイル/ディレクトリが存在するかどうかテストしていますが、そうでない場合は返されるため、これがどのように可能であるかわからないため、KeyErrorが得られます。
これは私のコードです:
.
test
Traceback (most recent call last):
.
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 106, in <module>
test
fs.cmd_cd(['..'])
idk.txt
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 32, in cmd_cd
f = self._find(path)
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 27, in _find
_cd = _cd[part]
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 76, in __getitem__
return self.data[item]
KeyError: '..'
またはときに私は版画削除:それはあまりにも混乱している場合、私は申し訳ありません
Traceback (most recent call last):
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 106, in <module>
fs.cmd_cd(['..'])
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 32, in cmd_cd
f = self._find(path)
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 27, in _find
_cd = _cd[part]
File "/Users/jan/PycharmProjects/Xaon/src/fs.py", line 76, in __getitem__
return self.data[item]
KeyError: '..'
を
class AttributeDictionary(dict):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.__getattr__ = self.__getitem__
self.__setattr__ = self.__setitem__
self.__delattr__ = self.__delitem__
class FileManager(object):
def __init__(self):
self.disk_dir = DirectoryBase('__disk__')
self.current_dir = self.disk_dir
def _find(self, path):
""" Gets file/dir object using path """
_cd = self.current_dir
for part in path:
_cd = _cd[part]
return _cd
def cmd_cd(self, path):
""" Classic unix `cd` command """
f = self._find(path)
if f is DirectoryBase:
self.current_dir = f
else:
return FileSystemError('DirectoryNotFound')
def cmd_ls(self):
""" Classic unix `ls` command """
return ConsoleOutput(''.join([f'{i}\n' for i in self.current_dir.data]))
def cmd_mkfile(self, name):
""" file making command """
self.current_dir.__setitem__(name, File(name, self.current_dir))
def cmd_mkdir(self, name):
""" file making command """
self.current_dir.__setitem__(name, Directory(name, self.current_dir))
class File(object):
def __init__(self, name, pd):
self.data = [0x00]
self.name = name
self.pd = pd
def path(self):
return [self.name] + self.pd.path()
def __sizeof__(self):
return len(self.data)
class DirectoryBase(AttributeDictionary):
def __init__(self, name, **kwargs):
super().__init__(**kwargs)
self.name = name
self.data = {'.': self}
def path(self):
return self.name
def __getitem__(self, item):
if item in self.data.keys():
return FileSystemError('FileNotFound')
return self.data[item] # KeyError: '..' found here
def __setitem__(self, key, value):
if key in self.data.keys():
return FileSystemError('FileAlreadyExists')
self.data[key] = value
def __delitem__(self, key):
if key in self.data.keys():
return FileSystemError('FileNotFound')
self.data.__delitem__(key)
class Directory(DirectoryBase):
def __init__(self, name, pd, **kwargs):
super().__init__(name, **kwargs)
self.pd = pd
self.data = {'.': self, '..': self.pd}
def path(self):
return [self.name] + self.pd.path()
if __name__ == '__main__':
fs = FileManager()
fs.cmd_mkdir('test')
print(fs.cmd_ls())
fs.cmd_cd(['test'])
fs.cmd_mkfile('idk.txt')
print(fs.cmd_ls())
fs.cmd_cd(['..'])
print(fs.cmd_ls())
エラーは次のようになります初心者と私の英語は悪いです。
あなたはまだ学んでいる間、あなたは、Python 3.xのに切り替える必要があります。 – wwii
私はpythonを使用しています。3.6.1 – C05
申し訳ありませんが、 'object' - ' class File(オブジェクト: ' – wwii