2015-10-22 2 views
0

Мой код поиск *.lis файлы в каталоге и поиске aborted - *.lis файлов.Поиск «прерванных» файлов в каталоге

Вот мой код:

def aborted_files(file): 
    in_file = open(file,'r') 
    for lines in in_file.readlines(): 
     if re.search("aborted", lines): 
      print in_file 

    in_file.close() 

for file in os.listdir("./"): 
    if file.endswith(".lis"): 
     aborted_files(file) 

я проверить его в 2-х файлов lisfile1.lis и lisfile2.lis.

В lisfile1.lis У меня есть aborted и результат моего кода был:

<open file 'lisfile1.lis', mode 'r' at 0x2b0edd174660> 
<open file 'lisfile1.lis', mode 'r' at 0x2b0edd174660> 

Не могли бы вы помочь мне, чтобы получить в результате только aborted - *.lis имена файлов.
Что является неправильным в коде?

+0

Вы хотите, чтобы имена файлов были прерваны в нем? – The6thSense

+0

Вы, кажется, прав. Он печатает «listfile1.list» дважды, потому что вы, вероятно, дважды «прервали» в файле, и вы печатаете каждый раз, когда вы находите слово. – dursk

+0

Нет, причина в том, что mt loop работает 2 раза, поэтому я получаю имя файла дважды. –

ответ

1

Там две вещи здесь.

(1) Вы печатаете файл для каждого матча. Я предполагаю, что есть >= 1 вхождения 'aborted', вы, вероятно, просто хотите напечатать имя файла один раз. (2) Вы печатаете фактический файл-объект, а не имя файла. Также вы просто используете with open(...), который будет обрабатывать закрытие файла для вас.

def aborted_files(file): 
    with open(file, 'r') as in_file: 
     for lines in in_file.readlines(): 
      if re.search("aborted", lines): 
       print in_file.name 
       return 
1
  1. Если вы хотите напечатать имя файла, вы можете просто распечатать переменную file.name.

  2. И тогда вам не нужно re.search() функция здесь, просто используйте in.

  3. Использовать return для возврата имени файла будет лучше, чем использовать print.

    Однако, если вы используете печать здесь, он напечатает имя файла n раз (n - сколько aborted в этом файле).

  4. .readlines() здесь также бесполезно.

  5. with для автоматического закрытия файла будет проще и безопаснее.


def aborted_files(file): 
    with open(file, 'r') as in_file: 
     for lines in in_file: 
      if "aborted" in lines: 
       return in_file.name 

for file in os.listdir("./"): 
    if file.endswith(".lis"): 
     print aborted_files(file) 
+1

ОП просит, чтобы он хотел, чтобы результаты были именами файлов – dursk

+0

@dursk Упс, поймите. Позвольте мне отредактировать мой ответ. –

Смежные вопросы