我刚刚阅读了很多有关如何处理Python中的StopIteration错误的文章,但我仍然无法解决我的特定问题。基本上,我有一个包含许多前缀的csv文件。该文件具有两个带标题的列:Word和Count。Count是该前缀出现的频率。我还有另一个文件,其中包含一些公司名称的列表。前缀文件从公司文件中每个公司名称的第一个单词中获取前缀。我正在尝试去除重复项,现在我想做的是:
每次出现此错误时都忽略StopIteration错误。
换句话说,我只想要一行代码,而不是写下所有被注释掉的“if”语句,该行代码应该是:如果生成StopIteration错误,则通过将有问题的“prefix”视为在前缀文件中出现超过两次的前缀来以某种方式简单地忽略该错误,这样我们应该返回不包括前缀的公司名称的值。我意识到,这忽略了前缀文件中存在不同的前缀值和公司名称的实际前缀之间的事实,但通常这与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
if
语句试图做的事情(对于一些硬编码的特殊情况)是获取字符串开头的数字(在任何其他字符之前停止,比如/
、-
或:
)。这可以很容易地通过正则表达式来实现。这样能解决问题吗? - David Robinson