-
Notifications
You must be signed in to change notification settings - Fork 0
/
FileSystem.py
62 lines (53 loc) · 1.65 KB
/
FileSystem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# This is a variation of design FileSystem
# Implement a file system that support the following functions
# Mkdir
# touch
# ls
# cd
# Cannot have duplicate file names under the same folder
# Brainstorm
#
from collections import defaultdict
class Node:
def __init__(self, name=""):
self.name = name
self.dirs = defaultdict(Node)
self.files = set()
class FileSystem:
def __init__(self):
self.root_dir = Node("~")
self.cur_dir = self.root_dir
# mkdir takes in a path, create a path from root or current position
def mkdir(self, path):
path_tokens = path.split("/")
tmp_pointer = self.cur_dir
for directory in path_tokens:
if directory == "":
continue
else:
if directory not in tmp_pointer.dirs:
tmp_pointer.dirs[directory] = Node(directory)
tmp_pointer = tmp_pointer.dirs[directory]
return
def touch(self, file_name):
if file_name not in self.cur_dir.files:
self.cur_dir.files.add(file_name)
def cd(self, path):
path_tokens = path.split("/")
tmp_pointer = self.cur_dir
for directory in path_tokens:
if directory == "": continue
if directory not in tmp_pointer.dirs:
raise KeyError("Path doesn't exist")
else:
tmp_pointer = tmp_pointer.dirs[directory]
self.cur_dir = tmp_pointer
return
def ls(self):
return list(self.cur_dir.files)
fs = FileSystem()
fs.mkdir("/dev/machine/")
print(fs)
fs.cd("/dev/machine")
fs.touch("james.txt")
print(fs.ls())