2016-07-14 12 views
0

最終的な文字を除いて一致するファイル名を見つけ出し、1つの文字列に連結するためにリストをループしています。一致する文字列の長いリストをPythonループで連結して連結します。

難しいのは、ファイル名ごとに一致する量がさまざまなため、一致するファイルが1つ、一致するファイルが2つ、3つまたは4つあります。

私は、重複を避けるためにすでにマッチしたループの反復を試して移動するために 'skip'変数を使用しています。

私は、おそらくリストから要素を取得するために 'i'変数を使用して問題が発生すると思いますが、わかりません。

あなたはおそらく私がPythonとプログラミングに新しいと私には見えない私のロジックのどこかに深刻な欠陥があると言うことができます!不明な点があれば、私ができる限り最善を尽くすように説明し、どんな助けでも大いに感謝します。

reader = [34113751IHF.jpg, 34113751IHR.jpg, 34136676OTD.jpg, 34136676OTF.jpg, jpg34136676OTR.jpg, 34136676OTF.jpg, 34136676OTR.jpg, 34139933EDD.jpg, 34139933EDF.jpg, 34144626KXF.jpg, 34144626KXR.jpg] 

iterable = iter(reader) 

skip = 0 

for i, j in enumerate(iterable): 

    firstURL = str(j)[2:-2] 
    firstShorter = str(reader[i+1])[2:-3] 
    secondURL = str(reader[i+1])[2:-2] 
    secondShorter = str(reader[i+1])[2:-3] 

    if firstShorter == secondShorter: 
     toWrite = firstURL + ".jpg|" + secondURL + ".jpg" 
     thirdURL = str(reader[i+2])[2:-2] 
     thirdShorter = str(reader[i+2])[2:-3] 
     skip = 2 

     if secondShorter == thirdShorter: 
      toWrite += "|" + thirdURL + ".jpg" 
      fourthURL = str(reader[i+3])[2:-2] 
      fourthShorter = str(reader[i+3])[2:-3] 
      skip = 3 

      if thirdShorter == fourthShorter: 
       toWrite += "|" + thirdURL + ".jpg" 
       fifthURL = str(reader[i+4])[2:-2] 
       fifthShorter = str(reader[i+4])[2:-3] 
       skip = 4 

    else: 
     toWrite = firstURL + ".jpg" 
     skip = 1 

    [iterable.__next__() for x in range(skip)] 
+0

期待する出力を書き留めてください。あなたの問題を理解することは非常に難しいです。次のようなリストが必要ですか:["34113751IHF34113751IHR"、 "34136676OTD34136676OTF"、...]? –

答えて

2

私が正しくあなたを理解していれば、あなたはグループに連結されたすべてのファイル名だ文字列に(最後の文字と「.JPG」を除く)と一致するすべてのファイル名をしたいですか?ここでそれを行う方法の例です:

from collections import Counter 

# The list you provided 
reader = ['34113751IHF.jpg', '34113751IHR.jpg', '34136676OTD.jpg', '34136676OTF.jpg', '34136676OTR.jpg', 
      '34136676OTF.jpg', '34136676OTR.jpg', '34139933EDD.jpg', '34139933EDF.jpg', '34144626KXF.jpg', 
      '34144626KXR.jpg'] 

# Creating a copy of the list but without the last character and '.jpg' 
check_list = [x[:-5] for x in reader] 

counter = Counter(check_list) 
grouped_list = [[k]*v for k, v in counter.items()] 

これはあなたの条件に一致するすべてのファイル名のリストを作成します。リストの文字列表現が必要な場合は、次のようにします。

string_rep = " | ".join(["".join(element) for element in grouped_list]) 
print(string_rep) 
OUTPUT: 34113751IH34113751IH | 34144626KX34144626KX | 34139933ED34139933ED | 34136676OT34136676OT34136676OT34136676OT34136676OT 
+0

ご協力ありがとうございます!私の頭を傷つける時間を節約しました! –

関連する問題