查找、打印并删除除了一行重复的PYTHON之外的所有行

2024-06-01 12:59:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的文本文件,行如下:

data123||data456
data146||data269
data123||data456
data697||data983
data123||data456

我想在上面的例子中找到重复的行,比如data123 | | data456,打印这些行,然后删除文件中除了一个副本之外的所有行。我希望能够提取完全相同的行。在

到目前为止,我有以下代码,但是它似乎打印所有重复的“data###########################。换言之,我希望提取逐字重复的整行代码,而不仅仅是分离“data”。在

^{pr2}$

Tags: 文件代码data副本例子文本文件pr2data123
3条回答

你把if语句颠倒过来了。你只想打印你以前没见过的线条,对吧?所以不是吗

with open("file.txt") as f:
    seen = set ()
    for line in f:
        line_lower = line.lower()
        if line_lower not in seen:
            print (line)
            seen.add(line_lower)

试试这个:

  1. 获取文件行

    lines = open("file.txt").readlines()
    
  2. 根据这些台词找一套。重复项不包括在集合中

    ulines = set(lines)
    
  3. 对于集合中的每一行,我们从原始列表中移除该行的一个实例

    for line in ulines:
        #we know the line will exist in the list, because it exists in the set
        lines.remove(line)
    
  4. 最后,集合包含非重复的,列表包含重复的(不被集合迭代的)实例。我们可以通过

    duplicated = set(lines)
    
    print duplicated
    print ulines
    

请参见http://docs.python.org/2/tutorial/datastructures.html<;<;列表.删除(x) ,和“5.4套”

如果你的文件不是很大,这里有一个简单的方法:

lines = [line.lower() for line in open("file.txt")]
unique = set(lines)
duplicates = set([line for line in unique if lines.count(line) > 1])

duplicates将包含在文件中多次出现的unique的每个值的单个实例。在

相关问题 更多 >