2016-11-21 46 views
1

我試圖創建一個循環以檢查兩個文件,並與特定字段匹配的正則表達式進行比較。Python - 使用正則表達式循環兩個文件的循環

avi file 
TVShowName.S01E01.W.DVDRip.XviD.avi 
TVShowName.S01E02.W.DVDRip.XviD.avi 
TVShowName.S01E03.W.DVDRip.XviD.avi 

srt 
tvShowName.S01E01.episodename.DVDRip.XviD.srt 
tvShowName.S01E02.episodename.DVDRip.XviD.srt 
tvShowName.S01E03.episodename.DVDRip.XviD.srt 

沒有循環,我可以匹配文件,並使魔法發生。儘管當我使用循環時,它只能到達第一行。

TVShowName.S01E01.W.DVDRip.XviD.avi 
TVShowName.S01E01.W.DVDRip.XviD.srt 

代碼:

f1 = open('avi', 'r') 
f2 = open('srt', 'r') 
f3 = open ('merge', 'a') 
for avi in f1: 
    m = re.search(".*([Ss][0-20].[eE][0-24].)+.*", avi) 

    for sub in f2: 
     n = re.search(".*([Ss][0-20].[eE][0-24].)+.*", sub) 
     if m.group(1) == n.group(1): 

      str_avi = str(m.group(0)) 
      #print str_avi 

      ext_srt = str_srt.split('.') 
      ext_avi = str_avi.split('.') 

      #print ext_avi 
      #conv_str = str(m.group(0)) 
      merge = str_avi.replace(ext_avi[-1],ext_srt[-1]) 
      print merge 
      f3.write(merge) 
f3.close() 
+0

你可以添加一些文件輸入嗎? –

+0

您沒有在提供的代碼片段中定義'str_srt' – asongtoruin

+0

輸出它已經在帖子伴侶上。我仍然不確定我在哪裏弄錯了 –

回答

0

我不能完全肯定,如果這是你想要的輸出。我無法添加評論,因爲我沒有足夠的聲望點。

import glob 
import re 
avifiles = [] 
srtfiles = [] 
for afile in glob.glob('*.avi'): 
    avifiles.append(afile) 
for sfile in glob.glob('*.srt'): 
    srtfiles.append(sfile) 
#f1 = open('avi', 'r') 
#f2 = open('srt', 'r') 
f3 = open ('merge', 'a') 
for avi in avifiles: 
    m = re.search(".*([Ss][0-20].[eE][0-24].)+.*", avi) 

for sub in srtfiles: 
    n = re.search(".*([Ss][0-20].[eE][0-24].)+.*", sub) 
    if m.group(1) == n.group(1): 

     str_avi = str(m.group(0)) 
     str_srt = str(n.group(0)) 

     ext_srt = str_srt.split('.') 
     ext_avi = str_avi.split('.') 

     #print ext_avi 
     #conv_str = str(m.group(0)) 
     merge = str_avi.replace(ext_avi[-1],ext_srt[-1]) 
     print merge 
     f3.write(merge+"\n") 
f3.close() 
+0

我再次寫了腳本。它正在工作。我只是做一些調整,然後發佈。 –

0

我做了如下代碼,它似乎工作。我的下一步是添加更多視頻擴展。但它應該很容易。 謝謝你們的幫助!

import re, os, sys, itertools 

str_avi = '' 
split_avi = '' 
global zzz 
lista_avi = [] 
lista_srt = [] 
lista_final = [] 
os.chdir('.') 
f1 = os.listdir(".") 


for full in f1: 
    avi = re.search(".*([Ss][0-9].[eE][0-9].)+.*(...$)", full) 
    if avi: 

     if avi.group(2) == 'avi': 
      lista_avi.append(avi.group(0)) 
     elif avi.group(2) == 'srt': 
      lista_srt.append(avi.group(0)) 
     else: 
      pass 
    else: 
     print "Nenhum Arquivo localizado!"  

for f,b in itertools.izip(lista_avi,lista_srt): 
    data_avi = f.split('.')  
    data_srt = b.split('.') 
    data_regx_avi = re.search(".*([Ss][0-9].[eE][0-9].)+.*(...$)", f) 
    data_regx_srt = re.search(".*([Ss][0-9].[eE][0-9].)+.*(...$)", b) 
    for x in lista_srt: 
     data_regx_srt = re.search(".*([Ss][0-9].[eE][0-9].)+.*(...$)", x) 
     if data_regx_avi.group(1) == data_regx_srt.group(1): 
      print 'Arquivo video:', data_regx_avi.group(0) 
      print 'Arquivo sub: ', f.replace(data_avi[-1],data_srt[-1]) 
      #lista_final.append(f.replace(data_avi[-1],data_srt[-1])) 
      xx = f.replace(data_avi[-1],data_srt[-1]) 
      os.rename(x, xx)