2013-05-24 2 views
1

я должен очистить текстовый файл (test.txt), удаление строки, начинающиеся с «(» или нулевые строки, а затем переименовать его (test_ok.txt)фильтровать строки из текстового файла

Я использую эту функцию: .

def clearfile(filename): 
    for row in (open (filename, 'r')).readlines(): 
     if row[0][0]<>'\n' and riga[0][0]<>'(' : 
      out_file = open('%s_%s%s' %(os.path.splitext(filename)[0],'ok',os.path.splitext(os.path.basename(filename))[1]) , 'a') 
      out_file.write(riga) 
      out_file.close() 
    return out_file 

Это работает, но очень медленно Любые советы по optmize

Это моя новая функция:

def clearfile(filename): 
    with open (filename, 'r') as a, open('%s_%s%s' %(os.path.splitext(filename)[0],'ok',os.path.splitext(os.path.basename(filename))[1]) , 'a') as b: 
     for row in (a).readlines(): 
      if row[0][0]!='\n' and row[0][0]!= '(' : 
       b.write(row) 
     b.close 
+4

''<>'' является depricated, используйте '' = '!' Вместо этого! –

+0

Если вам понравилось ваше решение, вы можете отправить его в качестве ответа. – Jacinda

ответ

4

Зачем открывать/закрывать файл более одного раза?

def clearfile(filename): 
    out_file = open('%s_%s%s' %(os.path.splitext(filename)[0], 'ok', os.path.splitext(os.path.basename(filename))[1]) , 'a') 
    for row in (open (filename, 'r')).readlines(): 
     if row[0][0]!= '\n' and riga[0][0]!='(' : 
      out_file.write(riga) 
    out_file.close() 
    return out_file 
+6

использовать инструкцию '' with' (http://effbot.org/zone/python-with-statement.htm) для обработки файлов. –

+0

@AshwiniChaudhary Вы правы, я действительно должен изучить это утверждение. Спасибо за ссылку. –

+0

Вы также можете обновить свой ответ :) –

3

Попробуйте что-то вроде этого:

import os 
def clear_and_move(infname, outfname): 
    with open(infname, 'r') as inf, open(outfname, 'w+') as outf: 
     # write new file as a copy of the first 
     # skip lines that contain only whitespace or start with '(' 
     outf.writelines(line for line in inf 
         if line.strip() and not line.startswith('(')) 
    # delete the original file 
    os.remove(infname) 
Смежные вопросы