2013-05-10 63 views
0

我正在使用以下代碼來查找包含':'特殊字符的所有行。後來我想從文件中刪除那些行 -如何使用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

回答

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(),它將整個文件加載到內存中,而是寫入一個臨時文件,該文件被重命名爲原始文件。

+0

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

+0

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

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) 
相關問題