从原地删除文件中的一行

时间:2014-11-25 09:34:49

标签: python io

我有一个.txt,我想要一个python脚本来处理它。

我的.txt看起来像这样:

  • 27b23815-4cbb-dfae-3e6d-38f67ec4266e
  • 81a090bd-8973-bc37-5c7b-dc1a18e8ddee
  • 7e1bf596-88bc-d8fd-9aea-278d5c689eaa
  • 0b365fb0-dea4-53a1-fd27-6cbf9721602c
  • 1c317dcf-73f4-edf5-b6a1-ad663d2b507e
  • 6db8342d-1afb-2777-1a7f-a5daad06d2db

我想删除.txt的第一行,如果在第6行写的东西,但都没有从旧的.txt中删除。不能完全掌握这个:(

我知道我可以删除第一行:

       lines = file(idpath, "r").readlines()  
       del lines[0]  
       file(idpath,"w").writelines(lines) 

会感激任何帮助

2 个答案:

答案 0 :(得分:2)

由于文件范例是(可调整大小的)字节数组,因此您不能简单地从内部删除数据。相反,您可以执行以下任一操作:

  • 将要删除的片段后面的所有数据滑回以覆盖它,然后调整文件的大小
    (过时的,通常与内存映射文件一起使用,或者当您无法提供另一份数据副本时)
  • 将所有结果数据写入新文件,然后将其移到旧文件上 (典型的批处理,因为move在同一个文件系统中是原子的和即时的,即使文件被其他东西打开也可以工作(取决于操作系统),你可以在应用之前检查结果变化)
  • 读取需要保存到内存中的所有数据,然后将文件截断为零字节并写入新数据
    (典型的文本编辑器。文件无法通过其他内容打开,当你截断它时,旧内容丢失.OTOH,你不需要创建另一个文件的权限并覆盖这个一个)

对于列表操作,RTM Sequence types

答案 1 :(得分:0)

我明白了!现在我明白了,这很简单

 f = open('file','r')  
 lines = f.readlines()
 if lines[5]: del lines[0]