fbpx

Не правильно работает скрипт в убунте

311 просмотра
0
0 Комментариев

Написал простой скрипт который раскидывает картинки внутри каталога, на подкаталоги.
В винде все нормально, а на сервере не работает, картинки которые должны быть в каталоге
вида root/small/kh/kha2.jpg попадают в root/kh/kha2.jpg тем самым затирая оригиналы.
Хочется иметь такую структуру:

├─media
│ └ uploads
│   └─kiev
│     ├─03
│     ├─0c
│     ├─0e
│     ├─0s
│     ├─0z
│     ├─11
│     └─small
│         ├─03
│         ├─0c

А сейчас:

 ├─media
 │ └ uploads
 │   └─kiev
 
import os
import sys
import time
import Image
import shutil
from subprocess import Popen, PIPE
file_count = 0
err = 0
rootdir = sys.argv[1]
t1 = time.time()
small = ''
if not os.path.exists("%s/small/" % rootdir):
    os.makedirs("%s/small/" % rootdir)
for root, subFolders, files in os.walk(rootdir):
    for filename in files:
        if filename[0:6]=='small_':
            small = '/small'
            filename = filename[6:]
        else:
            small = ''
            small_file = ''
        folder_name = filename[0:2]
        file_count += 1
        try:
            path = "%s%s/%s" % (rootdir, small,folder_name)
            print path
            if not os.path.exists(path):
                os.makedirs(path)
        except Exception, e:
            print e
        try:
            if len(small):
                os.rename(os.path.abspath(os.path.join(root,"small_%s" % filename)), "%s/%s" %(path, filename))
            else:
                os.rename(os.path.abspath(os.path.join(root,filename)), "%s/%s" %(path,filename))
        except Exception, e:
            print e
            err = err + 1
 
print "Total count: %s, time: %s" % (file_count, time.time()-t1)


Добавить комментарий

2 Answers

Python Опубликовано 27.03.2019
0

Рекомендую поставить на сервер pudb, в начале скрипта добавить

import pudb; pudb.set_trace()

и узнать на каком этапе что-то происходит не так

Добавить комментарий
0

os.walk() гуляет по всем подкаталогам. в итоге заходит в /small и перекидывает оттуда картинки в каталоги к «не small».

> for root, subFolders, files in os.walk('/tmp/image'):
>      print root, subFolders, files
 
> /tmp/image ['small', 'ee', 'ww', 'e.', 'qq'] [] /tmp/image/small
> ['ee', 'ww', 'e.', 'qq'] []
> /tmp/image/small/ee [] []
> /tmp/image/small/ww [] []
> /tmp/image/small/e. [] []
> /tmp/image/small/qq [] []
> /tmp/image/ee [] ['ee.png']
> /tmp/image/ww [] ['ww.png']
> /tmp/image/e. [] ['e.png']
> /tmp/image/qq [] ['qq.png']

устанавливай один root, и бери все файлы в директории, думаю ты и без os.walk() отлично справишься.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up