Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2007 08:01:24

lexa
От:
Зарегистрирован: 2007-01-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

Привет.

Соорудил класс open для замены стандартного, главная штука в том, чтобы директории создавались, а не только файл.

Проверяю:

open('d:/dir/subdir/and/more/and/few/file.txt').write('content')
File “<pyshell#138>”, line 10, in write
return open(self.mkdir(self.file), self.k).write(content)
Потом идёт тоже самое и много-много раз, очень много. То есть действительно очень много.

А потом:

File “<pyshell#138>”, line 15, in mkdir
a = split('/', file)
File “C:\Python25\lib\re.py”, line 157, in split
return _compile(pattern, 0).split(string, maxsplit)
File “C:\Python25\lib\re.py”, line 222, in _compile
p = _cache.get(cachekey)
RuntimeError: maximum recursion depth exceeded in cmp
И я как бы понимаю в чём ошибка: рекурсии много, и сервер вот-вот отдал бы концы. Но не понимаю с чего её много так?

Вот класс:

class open:
def __init__(self, file, k = 'r'):
self.k = k
self.file = file

def read(self):
return open(self.file, self.k).read()

def write(self, content):
return open(self.mkdir(self.file), self.k).write(content)

def mkdir(self, file):
from re import split
from os import mkdir, path
a = split('/', file)
f = a.pop()
c = []
for i in a:
c.append(i)
p = '/'.join(c)
if not path.exists(p):
mkdir(p)
return p + '/' + f



Офлайн

#2 Янв. 21, 2007 09:36:50

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

а вам не кажется, что в файл открытый для чтения писать нельзя?



Офлайн

#3 Янв. 22, 2007 00:52:53

lexa
От:
Зарегистрирован: 2007-01-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

bialix, а вам? На самом деле, без разницы. Дописать ключ для записи и вё равно результат не тот, который ожидается. Как и в первом варианте, директории создаются, но файл нет. И по-прежнему возникает ошибка рекурсии.

Повторю вопрос: почему возникает ошибка рекурсии. Почему рекурсии так много, что она способна грохнуть сервер? Практически туда сюда бесконечность ;).



Офлайн

#4 Янв. 22, 2007 06:40:17

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

Рекурсия получается, потому что нефиг стандартные имена использовать, типа open и file. Начал создавать класс open - забудь про такую встроенную функцию (а она и в read и в write используется). А файл не создётся - bialix сказал уже - у функции open флаг должен быть ‘w’
У меня так получилось:

#from re import split - nafig ne nado
from os import mkdir, path

class open1:
def __init__(self, fil, k = ‘r’):
self.k = k
self.fil = fil

def read(self):
fil=open(self.fil, self.k)
return fil.read()

def write(self, content):
fil=open(self.mkdir(self.fil), self.k)
return fil.write(content)

def mkdir(self, fil):
a = fil.split('/')
f = a.pop()
a+='/'
c =
for i in a:
c.append(i)
p = ‘/’.join©
if not path.exists(p):
mkdir(p)
return p + ‘/’ + f

Вообще класс сомнительный, ведь файлы потом вроде закрывать надо…



Офлайн

#5 Янв. 22, 2007 07:51:50

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

До сих пор непонятно зачем городить класс для такой пустяковой задачи, если достаточно функции:

<pre>
import os

def myopen(path, mode='r'):
dir = os.path.dirname(path)
if not os.path.isdir(dir) and mode == ‘w’:
os.makedirs(dir)
return file(path, mode)
</pre>



Отредактировано (Янв. 22, 2007 07:53:40)

Офлайн

#6 Янв. 22, 2007 07:53:21

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

эээ? а как сделать код с подсветкой?



Офлайн

#7 Янв. 22, 2007 08:48:54

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

bialix: тут рядом тема “Подсветка синтаксиса ”.



Офлайн

#8 Янв. 22, 2007 09:23:16

lexa
От:
Зарегистрирован: 2007-01-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

Striver, bialix, вам обоим похеру чего писать, да? Самоцель - написать. Здорого, конечно, но читать нужно каждую строку, а не через одну.

За “#from re import split - nafig ne nado” и os.makedirs() спасибо, буду знать.

Я изучаю язык и мне хочется попробовать так и сяк, и мне хочется узнать почему не работает то или сё и по каким причинам. “Нехер” можете мамам своим оставить.

Вообщем, с одной стороны оно конечно спасибо, но с другой - идити-ка в пизду-ка.



Офлайн

#9 Янв. 22, 2007 09:44:07

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

lexa, поздравляю, ты стыл первым челом которого забанили на форуме.



Офлайн

#10 Янв. 22, 2007 09:46:53

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Рекурсивное создание директорий

bialix
<code:python> </code> в квадратный скобках

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version