Python从文件中删除一行或多行而不修改现有内容

2024-02-28

我必须根据文件中的用户输入删除字符串或字符串列表。 我参考了下面的链接,一切正常。

删除文件中的特定行(python) https://stackoverflow.com/questions/4710067/deleting-a-specific-line-in-a-file-python

但是,上述方法读取内存中现有的文件内容,如果找不到要删除的行,则将其写回同一文件中。如果我们处理包含大量机密数据的文件,则这种方法不适合。

我想知道的是,有没有更好的方法来做同样的事情。

  valid_List=["10.1.2.3","10.2.3.4","10.2.4.5","10.2.3.7"]
  filename="abc.txt"
  for i in valid_List:
    f = open(filename,"r")
    lines = f.readlines()
    f.close()
    f = open(filename,"w")
    for line in lines:
      if line!=i+" "+ "ok"+"\n":
        #print("Writing ip not to be deleted")
        f.write(line)
      else:
        print(i," Deleted")
        user_response.append(i+" Deleted")
        logger.info('Response returned to user%s',user_response)
    f.close()

您可以读取和写入两个不同的文件并按元素执行操作。

然后用输出文件替换输入文件

import shutil

valid_List = ["10.1.2.3", "10.2.3.4", "10.2.4.5", "10.2.3.7"]
filename = "abc.txt"
outfile = "outfile.txt"

with open(filename, "r") as f:
    with open(outfile, "w") as o:
        for line in f:
            if all([line != "%s ok\n" % i for i in valid_List]):
                o.write(line)
            else:
                print("%s Deleted" % line.strip())

shutil.move(outfile, filename)

Caveat这使用固定的文件名进行输出,当您并行运行程序多次时可能会导致冲突。如果你使用这个原子保存配方 https://stackoverflow.com/a/29491523/636626你可以将代码简化为

valid_List = ["10.1.2.3", "10.2.3.4", "10.2.4.5", "10.2.3.7"]
filename = "abc.txt"

with atomic_open(filename, "w") as o:
    with open(filename, "r") as f:
        for line in f:
            if all([line != "%s ok\n" % i for i in valid_List]):
                o.write(line)
            else:
                print("%s Deleted" % line.strip())

这将自动为您选择一个临时文件(无冲突),并在完成后用输出文件替换输入文件。

此外,您还会注意到我已经替换了您的外循环(为中的每个条目打开文件一次)valid_list) 与all()陈述。这也可以为您节省大量开销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python从文件中删除一行或多行而不修改现有内容 的相关文章

随机推荐

  • 如何在 CSS 中设置背景图像大小?

    所以我的CSS代码如下 jumbobg background url http znc mane frame com static silverleaf png fixed no repeat url img banner 1008444
  • 增加文本字段的大小

    我在用org eclipse swt widgets Text的文本字段类型 我想增加字段的长度 我该怎么做 对于每个字段 如果您的通用布局管理器是 GridLayout 则您的文本框布局数据将是 GridData 将宽度和高度传递到 Gr
  • 在空手道中对包含重复元素的表执行通配符操作? [复制]

    这个问题在这里已经有答案了 我遇到了这样一种情况 需要在断言用户输入后单击图标 如果有一些唯一标识符 事情就非常简单 例如使用 rightOf UniqueIdentifier find i click 达到了目的 也可以很好地工作 scr
  • 将日期从默认区域设置转换为英语区域设置

    我通过使用格式化日期来保存日期SimpleDateFormat DateFormat dateForm new SimpleDateFormat HH mm ss dd MMM yy String dateOutput dateForm f
  • jQuery 可以从我的事件处理程序中抛出错误吗?

    我在使用 jQuery 设置的特定事件处理程序中发生了错误 并且代码只是中断而没有显示任何错误 当我过去在 YUI 中编写类似的代码时 我会设置 YAHOO util Event throwErrors true 在我的开发中 versio
  • 如何使用 x,y 坐标列表绘制曲线(峰值)

    我有一个打印的 x y 点列表 显示不均匀的峰值曲线 上面的图像是通过在 java 绘图组件上绘制点而生成的 我使用以下方法将它们绘制在绘制组件上 g drawline pointX pointY pointX pointY 有没有更好的方
  • “编译器选项”-auxbase-strip 的作用是什么?

    我刚刚使用编译器选项 frecord gcc switches 编译了代码 以查看编译器自动选择哪些选项 现在我可以看到部分中的选项 GCC command line 有几个看似合理的编译器选项 但也有一个我找不到任何相关文档 什么是 au
  • 如何从 YouTube 视频中删除黑条

    YouTube 视频中出现了黑条 视频播放时看起来没什么奇怪的 我们可以删除视频中的黑色空间吗 我想删除那个黑色空间 并以我们为播放器尺寸选择的所需宽高比显示视频 目前我正在使用stander google YT 播放器API 这有意义吗
  • 如何在FabricJs中设置相对位置(oCoords)?

    我在fabricJs中有一个文本 我设置了顶部和左侧 这会将 aCoords 正确设置为这些值 但是 oCoords 不匹配 并且文本未显示在正确的位置 我怀疑我需要以某种方式设置为 oCoords 以便文本显示在画布上的右侧像素坐标 顶部
  • 如何动态更改 Jekyll _config.yml 中的变量?

    您好 我正在开发一个 Jekyll 项目 我需要在 config yml 中放置一个变量 我想从模板代码中动态更改该变量 这就是我想做的 但我无法让它发挥作用 是否有可能做到这一点 在 config yml中 my var value 在模
  • 友好 ID slug 不包含 id

    我想要这样的网址 http domain com products 454 table lamp 所以我像这样使用Friendly id extend FriendlyId friendly id slug candidates use h
  • 配置执行器端点安全

    Spring Boot Actuator 端点默认受基本 http 安全保护 可以更改为使用 Spring Security 吗 我已成功设置 Spring Security 并使用它来保护我的其他页面 I tried security b
  • 如何从nodejs中的process.environment中提取环境变量

    我已成功将条纹支付集成到我的虚拟 Nodejs 项目中 但我仍然面临一个问题 它不允许我继续前进 因为我必须将代码推送到我的 github 存储库 因此 我通过 npm 安装了 dotenv 包 并创建了一个 env 文件来存储我的条带密钥
  • 如何获取 Woocommerce 产品中的变体 ID

    我正在尝试进入一个插件 我正在编写产品的变体 ID 这是我写的 class mass public function construct add action woocommerce product after variable attri
  • Android minLines 和 maxLines 不能在同一个 TextView 中一起工作

    这里我只有 1 件商品ListView我展示了两个不同的TextViews末尾有不同颜色的ListView item 但问题是我想显示每个最多 3 行TextView但如果长度为TextView是小 但如果文本很大 它效果很好 当我添加an
  • 如何确保我的 django 项目正在使用我为其创建的虚拟环境?

    我知道已经有一个与此类似的问题 但我认为我想要的答案不存在 我是 django 的新手 我已经使用 virtualenv 和 django 项目创建了一个虚拟环境 但是我们如何知道我的项目正在使用虚拟环境的包而不是使用全局包 请给我一些详细
  • 在 Episerver 中截断 Xhtmlstring

    我需要获得截断的 Xhtmlstring 的 html 友好版本 因为截断时标签结尾可能会被截断 关于如何实现这一目标有什么想法吗 我想过先删除所有标签 然后进行剪切 但是 Episerver 内部是否有解决方案 或者这只是使用正则表达式进
  • Matplotlib 中的像素化动画

    我一直在使用 Matplotlib 的动画工具来制作动画人物 我注意到一个问题 对于具有大量帧的动画来说尤其明显 即图形的质量很快就会恶化 导致输出看起来像素化 模糊 例子 Messy grid lines pixelated output
  • 将 HTMLDocument 转换为可打印字符串

    我想将 Javascript DOM HTMLDcument 转换为可以写入文件的字符串 但是如何将 HTMLDocument 的字符串转换为 xml Update如果可能的话 我希望看到应用任何动态 JavaScript 渲染后生成的 h
  • Python从文件中删除一行或多行而不修改现有内容

    我必须根据文件中的用户输入删除字符串或字符串列表 我参考了下面的链接 一切正常 删除文件中的特定行 python https stackoverflow com questions 4710067 deleting a specific l