Python извлекает первый соответствующий экземпляр из нескольких файлов

Я написал код, который открывает несколько файлов в каталоге и выводит только первый экземпляр совпадения требуемого текста из каждого файла в качестве вывода.

Теперь я хочу, чтобы этот вывод был в файле. Если просто поместить print >> file.txt,..., .write или csv.write внутрь цикла, это не поможет.

Мой код:

import re, os, csv, sys

path = "D:\\"
in_files = os.listdir(path)
moldesc = ['Match1', 'Match2']

for f in in_files:
    file = os.path.join(path, f)
    text = open(file, "r")
    for line in text:
        if moldesc[0] in line:
            Text1 = line.split()[-1]          
        if moldesc[1] in line:
            Text2 = line.split()[-1]
            print f, Text1, Text2               # I WANT THIS OUTPUT IN A FILE
            break
    text.close()

print "We are extraction done !!!"  

person nilesh    schedule 26.09.2012    source источник
comment
Когда вы пишете print >> output, "some text", output должен быть открытым файлом (или другим файлоподобным объектом), а не именем файла.   -  person DzinX    schedule 26.09.2012
comment
Вы получите NameError, если moldesc[1] in line истинно, а moldesc[0] in line нет... (По крайней мере, в первый раз - в противном случае это может быть Text1 установлен из строки, которая совершенно не имеет ничего общего со строкой, в которой Text2 устанавливается for... [например, слегка неправильные результаты)) Кроме того, кажется, не имеет значения, какое совпадение вы получите, вы всегда берете последнее слово из строки? С таким же успехом можно просто if any(m in line for m in ['Match1', 'Match2']): ...   -  person Jon Clements♦    schedule 26.09.2012
comment
@DzinX Да, согласен вывод на печать ››, должен иметь открытый файл с именем output в режиме w, но все же в текущем скрипте он записывает только вывод для сопоставления только из первого файла в каталоге, тогда как я хочу, чтобы первый соответствующий экземпляр из всех файлов в каталоге ...   -  person nilesh    schedule 26.09.2012
comment
@Jon Clements Да, я сопоставляю разные слова, получаю последнее слово из строки и пытаюсь напечатать эти слова .... так что программа работает нормально. Но я хочу взять этот вывод в файл. Чего я не умею. Также помните, что я использую несколько файлов в качестве входных данных.   -  person nilesh    schedule 26.09.2012
comment
Итак, Text1 всегда предшествует Text2, а вывод последних слов строк 36 (текст1) и 3900 (текст2) [просто составляет их] является ожидаемым результатом?   -  person Jon Clements♦    schedule 26.09.2012
comment
@ Джон Клементс, да. я также загрузил конкретный пример, если вы хотите взглянуть на filecloud.io/o9xcvji1, предложите решение   -  person nilesh    schedule 26.09.2012


Ответы (1)


вам удалось открыть файл для чтения, это всего лишь один шаг до открытия файла для записи.

out = open(outfile, "w") 
for f in in_files:
    ...
    output_string = "{},{},{}\n".format(f, HOMO, LUMO)
    out.write(output_string)
person monkut    schedule 26.09.2012
comment
output_string = {},{},{}\n.format(f, HOMO, LUMO) AttributeError: объект 'str' не имеет атрибута 'format' - person nilesh; 26.09.2012
comment
вау, ты используешь python 2.5? вы можете использовать output_string = %s,%s,%s% (f, text1, text2) - person monkut; 26.09.2012
comment
должно быть, убедитесь, что вы закрыли файл, если у вас все еще есть проблемы, опубликуйте код с вопросом. - person monkut; 26.09.2012
comment
это было фантастически, сработало как по волшебству, просто закрытие файла сработало... большое спасибо - person nilesh; 26.09.2012