می خواهیم برنامه ای بنویسیم که با کمک آن بتوانیم فایل های خود را مدیریت کنیم.
##### نیاز هایی که باید این فایل منیجر برطرف کند عبارتند از:
* ساخت یک پوشه جدید
* ساخت یک فایل جدید
* جستجو کردن بر اساس نام فایل
* حذف فایل
* بازیابی فایل
## جزئیات
با توجه به نیازمندیهایی که در بالا گفته شد، یک کلاس با نام `FileManager` تعریف کنید که همه متدهای جدول زیر را طبق رفتار توضیح داده شده پیادهسازی کند.
| رفتار |خروجی| متد |
|:------------------:|:-------:|:-----------:|
|یک پوشه جدید با نام `name` در آدرس `address` می سازد.|`-`| `create_dir(name, address)` |
|یک فایل جدید با نام `name` در آدرس `address` ایجاد می کند .|`-`| `create_file(name, address)`|
|یک فایل با نام `name` را از آدرس `address` حذف می کند .|`-`| `delete(name, address)`|
|آدرس تمام فایل های با نام `name` را از آدرس `address` **به بعد** برمیگرداند|`List`| `find(name, address)`|
|فایل با نام `name` را بازیابی می کند.|`-`| `restore(name)`|
## نکات
* در متد `create_dir` در صورت عدم وجود پوشه باید پوشه ای جدید ساخته شود در غیر این صورت نباید هیچ اتفاقی بیفتد!
* در متد `create_file` در صورت عدم وجود فایل باید فایلی جدید ساخته شود در غیر این صورت نباید هیچ اتفاق دیگری بیفتد!
* در متد `delete` در صورت عدم وجود فایل نباید هیچ اتفاقی بیفتد
* در متد `find` باید یک لیست از تمام آدرس ها برگردانده شود ودر صورت عدم وجود فایلی با این نام یک لیست خالی برگردانده شود ترتیب این ادرس ها اهمیتی ندارد
* آدرسهای برگردانده شده از متد `find` باید از آدرس موجود در آرگومانها به بعد باشد (آدرس شامل خود آرگومان نیز میباشد)
.دقت شود که ممکن است فایل در سطوح پایین تر از سطح اول نیز موجود باشد.
* متد `restore`
* فایل بازیابی شده باید در آدرس قبلی خود قرار گیرد.
* اگر چند فایل هم نام بصورت متوالی حذف شوند باید با هربار صدا زدن متد `restore` فایلها به صورت متوالی و با عکس ترتیب حذف، بازیابی شوند.
* باید در عمل حذف و بازیابی محتوای فایل حفظ شود.
* در صورت عدم وجود فایلی برای بازیابی نباید هیچ اتفاقی بیفتد.
* برای حل این سوال می توانید هر فایل و یا پوشه دیگری که خواستید بسازید.
## نمونه
```
fm = FileManager()
fm.create_dir('test', '.')
fm.create_dir('test1', 'test')
fm.create_dir('test2', 'test/test1/')
fm.create_file('test.txt', 'test')
fm.create_file('test.txt', 'test/test1')
fm.create_file('test.txt', 'test/test1/test2')
```
#### خروجی: باید پوشه ها و فایل های زیر ایجاد شوند.
```
test
├── test1
│ ├── test2
│ │ └── test.txt
│ └── test.txt
└── test.txt
```
#### ادامه دستورات
```
print(fm.find('test.txt', 'test'))
```
#### خروجی
```
['test/test.txt', 'test/test1/test.txt', 'test/test1/test2/test.txt']
```
#### ادامه دستورات
```
fm.delete('test.txt', 'test')
fm.delete('test.txt', 'test/test1/')
fm.delete('test.txt', 'test/test1/test2')
fm.restore('test.txt')
fm.restore('test.txt')
```
#### خروجی
```
test
├── test1
├── test2
│ └── test.txt
└── test.txt
```
#### آنچه باید آپلود کنید:
یک فایل Zip شامل یک فایل به نام `source.py` که کلاس `FileManager` در آن قرار دارد آپلود کنید.