Python:比较两个文本文件中相同的随机行

Python:比较两个文本文件中相同的随机行,python,compare,Python,Compare,我得到了一个wordlist.txt文件,里面有100个随机单词,每个单词都在一行中。我目前使用以下代码从这个文件中随机抽取12个单词。为了避免选择完全相同的12个单词,我想在一张额外的支票中加上。 12个随机字被写入output.txt。如何让我的脚本将12个随机词(按相同顺序)与output.txt中的12个随机词(在1行中)进行比较 我目前使用以下方法从wordlist.txt中读取12个随机单词,并将它们写入output.txt: teller = 0 while True:

我得到了一个wordlist.txt文件,里面有100个随机单词,每个单词都在一行中。我目前使用以下代码从这个文件中随机抽取12个单词。为了避免选择完全相同的12个单词,我想在一张额外的支票中加上。 12个随机字被写入output.txt。如何让我的脚本将12个随机词(按相同顺序)与output.txt中的12个随机词(在1行中)进行比较

我目前使用以下方法从wordlist.txt中读取12个随机单词,并将它们写入output.txt:

teller = 0

while True:
    teller += 1

    #Choose 12 random words and write to textfile
    print "\nRound",teller
    f1=open('output.txt', 'w+')
    count = 0
    while (count<12):
        f1.write(random.choice([x.rstrip() for x in open('wordlist.txt')])+ " ")
        count += 1
    f1.close()
teller=0
尽管如此:
出纳员+=1
#随机选择12个单词并写入文本文件
打印“\n环绕”,出纳员
f1=打开('output.txt','w+'))
计数=0

(计数而不是
随机选择()
),将所有单词读入列表并使用:

random.sample()
保证从输入列表中选择12个不同的单词

因为你的单词表很小(只有100个单词),所以把它们全部读到内存中的一个列表就很好了

如果您的输入文件较大(兆字节到千兆字节),您可能希望移动到一个不考虑大小的算法,只需要输出样本大小的内存

如果您需要查找上一次运行的
output.txt
中尚未出现的12个随机单词,则需要先将它们读入集合:

with open('wordlist.txt') as wlist:
    words = [w.strip() for w in wlist]

with open('output.txt', 'r') as output:
    seen = {w.strip() for w in output}

with open('output.txt', 'a') as output:
    count = 0
    while count < 12:
        new_word = random.choice(words)
        if new_word in seen:
            words.remove(new_word)
            continue
        seen.add(new_word)
        output.write(new_word + '\n')
        count += 1
以open('wordlist.txt')作为wlist的
:
words=[w.strip()表示wlist中的w]
以open('output.txt','r')作为输出:
seen={w.strip()表示输出中的w}
以open('output.txt','a')作为输出:
计数=0
当计数小于12时:
新单词=随机选择(单词)
如果看到新单词:
删除(新单词)
持续
已看到。添加(新单词)
输出.写入(新单词+'\n')
计数+=1

在这里,我打开
output.txt
文件,用
'a'
进行附加,添加我们以前从未见过的12个新单词。

random.sample
在这里可能很有用。你能给我举个例子吗?或者一个带解释的链接吗?你能发邮件给我吗?不知怎么,我搞不懂编辑…(idokasse a(t)Gmail否,我们无法向您发送电子邮件。Stack Overflow也可以帮助其他人。如果他们有相同或类似的问题,他们可以阅读此处发布的答案,但发送给您的电子邮件只能由您阅读。此外,请不要试图通过编辑帖子来对答案进行反馈。您可以在答案下方添加评论。我已将我的答案更新为显示一个选项来选择12个以前不在
output.txt
中的新词。谢谢,但似乎我对缩进块做了一些错误。它说,我现在有这样一个选项:是的,缩进完全错误。不要在编辑器中混合制表符和空格,并仔细查看代码;一个带有
语句的
吃一个新块,所以它下面的行是缩进的,等等。更像这样?对不起,我看不出这里有什么错。请告诉我我有什么错。我只有制表符,没有空格。它告诉我第20行有什么问题,但我无法理解?它是缩进的?不,匹配我答案中的缩进。三个
状态符当我像您的代码一样匹配它时,ts对齐了。仍然第20行(words=[w.strip()表示wlist中的w])错误?
with open('wordlist.txt') as wlist:
    words = [w.strip() for w in wlist]

with open('output.txt', 'r') as output:
    seen = {w.strip() for w in output}

with open('output.txt', 'a') as output:
    count = 0
    while count < 12:
        new_word = random.choice(words)
        if new_word in seen:
            words.remove(new_word)
            continue
        seen.add(new_word)
        output.write(new_word + '\n')
        count += 1