Python で StopIteration エラーを処理する方法に関する一連の投稿を読んだところですが、特定の例を解決するのに苦労しました。基本的に、多くのプレフィックスを含む csv ファイルがあります。このファイルには、ヘッダー付きの 2 つの列 (Word と Count) があります。カウントは、そのプレフィックスが発生する頻度です。会社名のリストを含む別のファイルもあります。プレフィックス ファイルは、会社ファイル内の各会社名の最初の単語からプレフィックスを取得しました。重複を削除しようとしていますが、今やりたいことは次のとおりです。
このエラーが発生するたびに StopIteration エラーを無視します。
つまり、コメントアウトされたすべての「if」ステートメントを以下に記述する代わりに、「StopIteration エラーが発生した場合は単にエラーを無視する」という 1 行が必要です。接頭辞ファイルに 2 回以上出現する接頭辞であったため、接頭辞を含めずに会社名の値を返す必要があります。これは、プレフィックスファイルと会社名の実際のプレフィックスに異なるプレフィックス値があるという事実を無視していることに気付きましたが、通常、Python と Excel の間で異なる方法で保存されたアメリカ英語以外の文字と関係があります。特に体系的とは思えない方法なので、後で手動で削除します。
私のコードは次のとおりです。
def remove_prefix(prefix, first_name):
#try:
#EXCEPTIONS:
#if '(' in prefix:
# prefix = prefix[1:]
#if ')' in prefix:
# prefix = prefix[:-1]
"""
if prefix == "2-10":
prefix = "2"
if prefix == "4:2:2":
prefix = "4"
if prefix == "5/0" or prefix == "5/7" or prefix == "58921-":
prefix = "5"
"""
#except StopIteration:
# pass
print(first_name, prefix)
input_fields = ('Word', 'Count')
reader = csv.DictReader(infile1, fieldnames = input_fields)
#if the prefix has a frequency of x >=2 in the prefix file, then return first_name without prefix
#else, return first_Name
infile1.seek(0)
#print(infile1.seek(0))
next(reader)
first_row = next(reader)
while prefix != first_row['Word'] and prefix[1:]!= first_row['Word']:
first_row = next(reader)
#print(first_name, prefix)
#print(first_row, first_name, prefix, '\t' + first_row['Word'], prefix[1:])
if first_row['Count'] >= 2:
length = len(prefix)
first_name = first_name[length+1:]
#print("first name is ", first_name)
return first_name