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

标签 python algorithm random

我是 Python 的新手(因为我是通过 CodeAcademy 类(class)学习的),需要一些帮助来解决这个问题。

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

所以如果我的文件有 10 行:

Carrot
Banana
Strawberry
Canteloupe
Blueberry
Snacks
Apple
Raspberry
Papaya
Watermelon

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

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

我目前的问题是双重的:

  1. 它正在复制随机元素。如果它选择了一条线,我需要它不要再次选择同一条线。但是,使用 random.sample 似乎不起作用,因为当我稍后使用每一行附加到 URL 时,我需要将这些行分开。
  2. 我觉得我的逻辑(写入数组 -> 在文本文件中查找匹配项 -> 删除)不是最理想的逻辑。有没有更好的写法?

    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()
    

最佳答案

要点是:您不是从文件中“删除”,而是用新内容重写整个文件(或另一个文件)。规范的方法是逐行读取原始文件,将要保留的行写回临时文件,然后用新文件替换旧文件。

with open("/path/to/source.txt") as src, open("/path/to/temp.txt", "w") as dest:
    for line in src:
        if should_we_keep_this_line(line):
            dest.write(line)
os.rename("/path/to/temp.txt", "/path/to/source.txt")

关于Python:从文件中选择随机行,然后删除该行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788380/

相关文章:

c - 如何制作确定性随机数生成器?

python - Odoo继承日历并将公共(public)假期添加到日历 View 中

performance - 模拟分离力 n 个物体

java - 如何在 java 中使用基本方法实现通用 PriorityQueue?

java - 随机数生成器 : mainly how to stop repetition of numbers. Java

php - 如何确保在一次 session 中评分的图像不会再次出现供用户评分?

python - 如何将使用类 shell 语法创建的空格分隔值 (csv) 文件读取到 DataFrame 中

python - {% include ... %} 标签和 Django 模板中的 {% ssi ... parsed %} 标签有什么区别?

python - 如何将数组转换为数据框?

c++ - 解决类似 Flood-It 难题的最少点击次数