Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在保存时保持顺序,并在文本文件列表中仅保留唯一的单词_Python 3.x - Fatal编程技术网

Python 3.x 在保存时保持顺序,并在文本文件列表中仅保留唯一的单词

Python 3.x 在保存时保持顺序,并在文本文件列表中仅保留唯一的单词,python-3.x,Python 3.x,需要按txt文件中保存的顺序对行进行排序,只需从下面的新行中删除类似的单词,然后按此顺序保存即可。所以如果我在循环中一个接一个地添加单词 line A line B line C line D line E 这里我有三个解决方案,但没有一个对我有效 首先,只保留唯一的单词 with open('C:\my_path\doc.txt', 'r') as lines: lines_set = {line.strip() for line in lines} with open(

需要按txt文件中保存的顺序对行进行排序,只需从下面的新行中删除类似的单词,然后按此顺序保存即可。所以如果我在循环中一个接一个地添加单词

line A 
line B 
line C 
line D 
line E 
这里我有三个解决方案,但没有一个对我有效

首先,只保留唯一的单词

with open('C:\my_path\doc.txt', 'r') as lines: 
    lines_set = {line.strip() for line in lines}
with open(''D:\path\file.txt', 'w') as out:
    for line in lines_set:
        out.write(line + '\n')
但破坏了秩序:

1. line B
2. line E
3. line C
4. line D
5. line A
第二个保持秩序,但同样的话:

with open('C:\my_path\doc.txt', 'r') as lines:
    lines_set = []
    for line in lines:
        if line.strip() not in lines_set:  
            lines_set.append(line.strip())
最后一个很好,但与输入文本:

   with open('C:\my_path\doc.txt', 'r') as lines:
       lines_set = []
       for line in lines:
            if line.strip() not in lines_set: 
                lines_set.append(line.strip())
在某些情况下,我并没有任何输入,也有不同的输入,所以需要对有序列表本身进行排序


你能帮我弄清楚它吗?载重线

几乎和你两次展示的功能一样,但它允许重复<代码>移除的副本
剥离重复项<代码>保存行将列表写入文件,并通过换行符删除。所有函数都保持顺序

#Load lines with duplicates
def loadLines(f):
    with open(f, 'r') as lines:
        lines_set = []
        for line in lines:
            lines_set.append(line.strip())
    return lines_set

#Search list "l", return list without duplicates.
def removeDuplicates(l):
    out = list(set(l))
    for i in enumerate(out):
        out[i[0]] = l.index(i[1])
    out.sort()
    for i in enumerate(out):
        out[i[0]] = l[i[1]]
    return out

#Write the lines "l" to filepath "f"
def saveLines(f, l):
    open(f, 'w').write('\n'.join(l))

lines = loadLines('doc.txt')
print(lines)
stripped_lines = removeDuplicates(lines)
print(stripped_lines)
saveLines('doc.txt', stripped_lines)

最后两个看起来是一样的?我假设粘贴错误。我不确定你的问题是什么,你想要一个排序的列表,还是原始顺序的列表?每个循环我都在文本文件中添加了一个新词,但在某个或每个循环的特定条件下,我想要删除重复的词。我需要一个不断扩展的列表,其中只有一行,但保持原来的顺序,因为它只是在运行。每次删除相同的单词后,每一行都来自下面。我猜原始的顺序是,但在前面积极添加新行。只需构建列表,然后通过另一个函数运行它,以删除重复项。然后你可以调用一个排序
removeDuplicates(list)
函数。你能在这个例子中告诉我怎么做吗,因为我已经尝试过了,但是没有比我如何排序更好的方法了,那就是不替换第一个循环中out的数据,而是创建一个新的列表,并根据新列表的排序顺序进行排序。我不知道如何在Python中轻松地做到这一点,但这会删除一个循环。是的,是的,我不想返回它,我想在file.txt中删除这个重复项,其结果与您的代码返回它的结果完全相同(具有原始序列,没有重复项,没有附加到当前输入),所以只有一个区别,把它放在课文里document@L_Oni,您只需要一个基本的保存功能吗?这应该只需要几秒钟。循环创建单词,并且单词必须以自然的方式一行一行地存储在文本文档中。但有时同一个重复的单词也必须保存在列表中,而不是一个或两个,只是无限的数字,直到在某个特定的周期内,没有形成一个特定的条件,一次删除所有重复的单词并保持唯一,这就是我不想使用当前输入的原因之一。因此,您的代码是完美的,并且满足了这一目标,但是您能在文本文档中演示如何做到这一点吗itself@L_Oni,我不知道你在问什么。要编辑文档,请首先加载数据,修改该数据,然后将其写回文档。我提供的
保存行(f,l)
函数就是这样写的。因此,在文本文档本身中,这实际上也是这样做的。编辑:也许你错过了我的最新答案,因为你最后的评论:p。