删除文本文件中的类似行

时间:2015-08-20 06:23:49

标签: python

我没有使用Python,但我在python中有脚本:

脚本的一部分

elif line.find("CONECT") > -1:
                con = line.split()
                line_value = line_value + 1
                #print line_value
                #print con[2]
                try:
                        line_j = "e" + ', ' + str(line_value) + ', ' + con[2] + "\n"
                        output_file.write(line_j)
                        print(line_j)
                        line_i = "e" + ', ' + str(line_value) + ', ' + con[3] + "\n"
                        output_file.write(line_i)
                        print(line_i)
                        line_k = "e"+ ', ' + str(line_value) + ', ' + con[4] + "\n"
                        print(line_k)
                        output_file.write(line_k)
                except IndexError:
                        continue

以格式

提供.txt输出
e, 1, 2

e, 1, 3

e, 1, 4

e, 2, 1

e, 2, 3

etc.

我需要删除具有相同数字的类似行,但无论是订购此数字

即。 e,2,1,...

有可能吗?

3 个答案:

答案 0 :(得分:0)

当然,最好在您将代码写入文件之前修改代码以删除这些代码行。您可以使用列表存储已保存的值,并且在每次迭代时,如果您要添加的值已存在于该列表中,则执行搜索。以下代码未经过测试和优化,但它解释了一个想法:

# 'added = []' should be placed somewhere before 'if'
added = []     

# you part of code
    elif line.find("CONECT") > -1:
                    con = line.split()
                    line_value = line_value + 1
                    try:
                            line_j = "e, %s, %s\n" % (str(line_value),con[2])
                            tmp = sorted((str(line_value),con[2]))
                            if tmp not in added:
                                added.append(tmp)
                                output_file.write(line_j)
                                print(line_j)
                            line_i = "e, %s, %s\n" % (str(line_value),con[3])
                            tmp = sorted((str(line_value),con[3]))
                            if tmp not in added:
                                added.append(tmp)
                                output_file.write(line_i)
                                print(line_i)
                            line_k = "e, %s, %s\n" % (str(line_value),con[4])
                            tmp = sorted((str(line_value),con[4]))
                            if tmp not in added:
                                added.append(tmp)
                                print(line_k)
                                output_file.write(line_k)
                    except IndexError:
                            continue

答案 1 :(得分:0)

以下是文件两行的比较方法:

def compare(line1, line2):
    els1 = line1.strip().split(', ')
    els2 = line2.strip().split(', ')
    return Counter(els1) == Counter(els2)

请参阅the documentation for the Counter class

如果元素数量无关紧要,您可以将Counter类替换为set而不是

答案 2 :(得分:0)

以下方法应该有效。首先在代码中进一步添加以下行:

seen = set()

然后使用以下代码替换try内的所有内容:

for con_value in con[2:5]:
    entry = frozenset((line_value, con_value))

    if entry not in seen:
        seen.append(entry)
        line_j = "e" + ', ' + str(line_value) + ', ' + con_value + "\n"
        output_file.write(line_j)
        print(line_j)

确保此代码缩进到与其替换的代码相同的级别。