如何使用python从文件中删除一行

问题描述:

我正在使用以下代码来查找包含':'特殊字符的所有行。后来我想从文件中删除那些行 -如何使用python从文件中删除一行

myFile = open('myPOST.txt', 'rb') 
    myText = myFile.readlines() 
    for line in myText: 
      line.find(":") == "-1" 
     if line.find(":"): 

是否有蟒蛇,它返回正是这个角色找到了行(find()方法返回-1或任何功能的搜索字符的位置该行)或者如果我只使用find(),那么如何删除find()的值为-1的那些行?

+0

如果你希望你的行号用'为LINE_NO,在枚举行(会将myText)'' – jamylak 2013-05-10 13:08:15

使用fileinput

可选就地过滤:如果关键字参数inplace=1被传递给fileinput.input()或到FileInput构造函数,则文件被移动到备份文件和标准输出被引导至输入文件(如果与备份文件名称相同的文件已经存在,它将被无提示地替换)。这使得可以编写一个过滤器来重写其输入文件。

myPOST.txt

abc 
de:f 
ghi 

import fileinput 
for line in fileinput.input('myPOST.txt', inplace=True): 
    if ':' in line: 
     continue # skip it 
    print line.rstrip('\n') # stdout redirected to file 

myPOST.txt

abc 
ghi 

这个解决方案的好处是,它不使用.readlines(),它将整个文件加载到内存中,而是写入一个临时文件,该文件被重命名为原始文件。

+0

打印line.rstrip()'是最有可能的权利(谁需要拖尾空间) - '打印行,'是一种可能性 – 2013-05-10 18:29:14

+0

@JonClements Alrighty我用'rstrip('\ n')' – jamylak 2013-05-13 09:07:29

如果你只是想你现有的程序中做到这一点,而无需它是一个命令行工具一样fileinput过人之处。

with open("myPOST.txt", "rb") as my_file: 
    for line in my_file: 
     if ":" not in line: 
      # do whatever you want here 
      # these are only the lines that do not have a ':' character 

,如果你只是想找到的行号

line_numbers = [] 
with open("myPOST.txt", "rb") as my_file: 
    for line_num, line in enumerate(my_file): 
     if ":" in line: 
      line_number.append(line_num)