2017-08-14 36 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) 
相關問題