一尘不染

Python:从文件中选择随机行,然后删除该行

algorithm

我是Python的新手(因为我是通过CodeAcademy课程学习的),可以使用一些帮助来解决这一问题。

我有一个文件“ TestingDeleteLines.txt”,大约300行文本。现在,我正在尝试使其从该文件中打印10条随机行,然后删除这些行。

因此,如果我的文件有10行:

    Carrot
    Banana
    Strawberry
    Canteloupe
    Blueberry
    Snacks
    Apple
    Raspberry
    Papaya
    Watermelon

我需要它从这些行中随机选择,告诉我它是随机选择的蓝莓,胡萝卜,西瓜和香蕉,然后删除这些行。

问题是,当Python读取文件时,它将读取该文件,并且一旦到达末尾,它就不会返回并删除行。我目前的想法是,我可以将这些行写到一个列表中,然后重新打开该文件,将该列表与文本文件进行匹配,如果找到匹配项,则删除这些行。

我当前的问题是双重的:

  1. 它正在复制随机元素。如果它选择一条线,我需要它不要再次选择同一条线。但是,使用random.sample似乎无效,因为当我以后使用每行追加到URL时,我需要将这些行分开。
  2. 我不认为我的逻辑(写到array->在文本文件中找到匹配项->删除)是最理想的逻辑。有没有更好的方法来写这个?
        import webbrowser
    import random

    """url= 'http://www.google.com'
    webbrowser.open_new_tab(url+myline)""" Eventually, I need a base URL + my 10 random lines opening in each new tab

    def ShowMeTheRandoms():
        x=1
        DeleteList= []
        lines=open('TestingDeleteLines.txt').read().splitlines()
    for x in range(0,10):
        myline=random.choice(lines)
        print(myline) """debugging, remove later"""
        DeleteList.append(myline)
        x=x+1
        print DeleteList """debugging, remove later"""
    ShowMeTheRandoms()

阅读 662

收藏
2020-07-28

共1个答案

一尘不染

我有一个文件“ TestingDeleteLines.txt”,大约300行文本。现在,我正在尝试使其从该文件中打印10条随机行,然后删除这些行。

    #!/usr/bin/env python
    import random

    k = 10
    filename = 'TestingDeleteLines.txt'
    with open(filename) as file:
        lines = file.read().splitlines()

    if len(lines) > k:
        random_lines = random.sample(lines, k)
        print("\n".join(random_lines)) # print random lines

        with open(filename, 'w') as output_file:
            output_file.writelines(line + "\n"
                                   for line in lines if line not in random_lines)
    elif lines: # file is too small
        print("\n".join(lines)) # print all lines
        with open(filename, 'wb', 0): # empty the file
            pass
2020-07-28