2012-05-25 8 views
0

Я создаю небольшой скрипт для автоматического преобразования файлов из .jpg в .png:Python обрабатывать несколько раз

import glob, os 
import Image 

basedir = "C:\Users\User\Desktop\\fimg\images\\" 
prefix = "picture" 

def convert_png(): 
    for jpg in glob.glob(os.path.join(basedir, '*.jpg')): 
     filename = f.rsplit('.')[-2] 
     njpg = Image.open(basedir + '%s.jpg' % (filename)) 
     njpg.save(basedir + '%s.png' % (filename)) 

     print "CONVERTED: " + filename + '.png' 

for i, f in enumerate(os.listdir(basedir), 1): 
    convert_png() 

Но с этим, кажется, преобразовать файл несколько раз (около 10), как это печатает преобразованное сообщение этой суммы, прежде чем переходить к следующему файлу. Здесь что-то не так, что заставляет это делать это?

C:\Users\User\Desktop\fimg>python test.py 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 16094.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
CONVERTED: 185500.png 
+1

Рассмотрите возможность использования 'os.splitext()' вместо 'f.rsplit()' для захвата расширения файла http://docs.python.org/library/os.path.html?highlight=splitext#os. path.splitext – Levon

+0

Является ли '' C: \ Users \ User \ Desktop \\ fimg \ images \\ "' просто опечаткой или находится в вашем реальном коде? У вас есть обратные косые черты, которые ускользают, а некоторые нет. –

+0

@nadirs '\ U' и' \ D' предположительно не являются escape-символами, поэтому он будет работать, хотя, вероятно, это плохая идея оставить его таким. – Dougal

ответ

1
import glob, os 
import Image 

basedir = "C:\Users\User\Desktop\\fimg\images\\" 
prefix = "picture" 

def convert_png(base): 
    njpg = Image.open(basedir + '%s.jpg' % base) 
    njpg.save(basedir + '%s.png' % base) 
    print "CONVERTED: " + base + '.png' 

for i, f in enumerate(os.listdir(basedir), 1): 
    base, ext = os.path.splitext(f) 
    if ext == '.jpg': # found jpg file 
     convert_png(base) 

Проблема была с вложенных циклов: Нижний for, который затем называют convert_png, который сам по себе был еще один цикл. Я исключил цикл в convert_png и несколько упростил код, только вызвав эту функцию, когда найден файл с расширением .jpg. Обратите внимание на использование splitext, чтобы разбить имя файла на его базу и расширение.

Смежные вопросы