1

我在 invalid_change 变量中有一个 id,我试图从输入文件“list.txt”中删除它并创建一个如下所示的文件 results.txt..谁能提供有关如何修复此问题的输入?我有一个示例输入和下面的预期输出..

'''
INPUT(list.txt:-

350882 348521 350166
346917 352470
360049


EXPECTEDOUTPUT(results.txt):-
350882 348521 350166
346917
360049
'''
invalid_list=['352470','12345']

f_write = open('results.txt', 'wb')

with open('list.txt','r') as f :
    for line in f :
        #delete the whole line if any invalid gerrit is presnet
        gerrit_list = line.strip().split(' ')

        ifvalid = True
        for gerrit in gerrit_list:
            try:  # check if invalid gerrit is present
                invalid_gerrit.index(invalid_change)
                ifvalid = False
                break
            except:
                pass

        if ifvalid:
            f_write.write(line)

f_write.close()
4

2 回答 2

0

gerrit_list 中的每个项目都是一个单独的数字。您无需查找无效更改是否包含在数字中。事实上,这可能会导致错误。您可以直接遍历 gerrit_list 中的项目并丢弃与 invalid_list 匹配的项目:

for line in f:
    gerrit_list = line.split()
    valid_gerrits = [gerrit for gerrit in gerrit_list if gerrit not in invalid_list]
    if valid_gerrits:
        newline = ' '.join(valid_gerrits) + '\n'           
        f_write.write(newline)
于 2013-07-10T02:41:58.580 回答
0

问题是当你到达这条线时:

346917 352470

ifvalid变量设置为False,因此该特定行(即使已调整)未写入输出文件。

可能的解决方案:

  1. 修改字符串,例如。使用正则表达式。他们会做更换。
  2. 不要跳过将“无效”行写入文件,只需准备它而不准备要删除的 ID(如解决方案 1 中所示)。

假如你有任何问题请告知我们。

您的代码中的其他问题是:

  • 尿布反模式(您捕获所有异常,包括NameError, 而您应该只捕获ValueError,或者更确切地说执行包含in关键字的测试) - 这就是您看不到与缺少invalid_changeinvalid_gerrit变量相关的错误的原因,
  • 如果您有 Python 2.7+ 或 3.1+,您f_write也可以在已经使用的语句中使用它,而不是打开和关闭,with
  • str.split()默认情况下按空格拆分,并从结果中删除空字符串,因此line.strip().split(' ')您可以只写而不是写line.split()
于 2013-07-10T02:33:40.183 回答