2017-08-14 33 views
-4
me=1 

while (me < 244): 
    f=open('%s' % me, 'rb') 

    tdata = f.read() 
    f.close() 

    ss = '\xff\xd8' 
    se = '\xff\xd9' 

    count = 0 
    start = 0 
    while True: 
     x1 = tdata.find(ss,start) 
     if x1 < 0: 
      break 
     x2 = tdata.find(se,x1) 
     jpg = tdata[x1:x2+1] 
     count += 1 
     fname = 'extracted%d03.jpg' % (count) 
     fw = open(fname,'wb') 
     fw.write(jpg) 
     fw.close() 
     start = x2+2 
     me=me+1 

我试图为多个文件运行此文件。 但它只对文件1和其余文件的操作被忽略。 我是非常新的蟒蛇任何人都可以调整这一点?Loop不处理目录中的其他文件

+0

@PaulRooney我用“%s”的%我,“RB”使用1作为文件名 和文件名是不带任何扩展 的代码是从缩略图数据中提取jpg –

+1

我用一些虚拟文件运行了这个程序,程序很好地处理了它们。请发布重现问题的代码和数据。 – Prune

+0

在'while True'循环中有'me = me + 1'。如果你的第一个文件有多于243个你正在查找的实例,那么外层循环只会运行一次。简而言之,将内部循环之外的'me'的增量移动。 –

回答

1

在您的最后一行代码中,您将为您的每个文件运行嵌套while循环内的me。要解决它,只需取消缩进me就好。

#!/usr/bin/python 

me=1 

while (me < 244): 
    f=open('%s' % me, 'rb') 

    tdata = f.read() 
    f.close() 

    ss = '\xff\xd8' 
    se = '\xff\xd9' 

    count = 0 
    start = 0 
    while True: 
     x1 = tdata.find(ss,start) 
     if x1 < 0: 
      break 
     x2 = tdata.find(se,x1) 
     jpg = tdata[x1:x2+1] 
     count += 1 
     fname = 'extracted%d03.jpg' % (count) 
     fw = open(fname,'wb') 
     fw.write(jpg) 
     fw.close() 
     start = x2+2 

    me=me+1 # this needs to be outside of your nested while loop 

话虽这么说,你可能想提高这个代码中的变量的名称(使它们更具描述性的!),和它很可能也是一个好主意,提取while循环的代码进入一个函数。还值得一提的是,while循环可以(并且应该)用for循环代替。

事情是这样的:

def do_something_with_file(me): 
    f=open('%s' % me, 'rb') 

    tdata = f.read() 
    f.close() 

    ss = '\xff\xd8' 
    se = '\xff\xd9' 

    count = 0 
    start = 0 
    while True: 
     x1 = tdata.find(ss,start) 
     if x1 < 0: 
      break 
     x2 = tdata.find(se,x1) 
     jpg = tdata[x1:x2+1] 
     count += 1 
     fname = 'extracted%d03.jpg' % (count) 
     fw = open(fname,'wb') 
     fw.write(jpg) 
     fw.close() 
     start = x2+2 


for i in range(1, 244): 
    do_something_with_file(i) 
相关问题