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

时间:2013-05-10 12:54:38

标签: python

我使用以下代码查找包含':'特殊字符的所有行。后来我试图从文件中删除这些行 -

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

python中是否有任何函数可以返回找到此字符的行(find()返回-1或行中搜索字符的位置)或者如果我只使用find()那么如何准确删除那些find()的值为-1的行?

2 个答案:

答案 0 :(得分:2)

使用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()将整个文件加载到内存中,而是写入一个临时文件,该文件被重命名为原始文件。

答案 1 :(得分:1)

如果您只想在现有程序中执行此操作,而不必使用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)