2016-05-24 4 views
-2

У меня есть набор текстовых файлов, которые имеют вид:извлечения часть текста из файла в Python

Sponsor  : U of NC Charlotte 
     U N C C Station 
     Charlotte, NC 28223 704/597-2000 

NSF Program : 1468  MANUFACTURING MACHINES & EQUIP 
Fld Applictn: 0308000 Industrial Technology     
      56  Engineering-Mechanical     
Program Ref : 9146,MANU, 
Abstract : 
      9500390 Patterson This award supports a new concept in precision metrology, 
      the Extreme Ultraviolet Optics Measuring Machine (EUVOMM). The goals for this 
      system when used to measure optical surfaces are a diameter range of 250 mm 
      with a lateral accuracy of 3.3 nm rms, and a depth range of 7.5 mm w 

есть больше текста выше и ниже фрагменте кода. Я хочу быть в состоянии сделать следующее для каждого текстового файла:

магазин программы NSF и номера Fld Applictn в списке, и сохранить соответствующий текст в другом списке

так, в приведенном выше примере Я хочу следующее для i-го текстового файла:

y_num[i] = 1468, 0308000, 56 
y_txt[i] = MANUFACTURING MACHINES & EQUIP, Industrial Technology, Engineering-Mechanical 

Есть ли чистый способ сделать это в python? Я предпочитаю python, так как я использую os.walk для анализа всех текстовых файлов, хранящихся в подкаталогах.

+0

В зависимости от того, насколько последовательны формат вы можете либо сделать это с помощью регулярных выражений или простые операции с строками или путем написания парсера. Все это возможно в python. –

+0

Да, и строковые операции, как правило, довольно утомительны, если вы делаете их много. Хотя иногда это не так уж плохо. См. Мой ответ, например. –

ответ

1
file = open("file","r") 
for line in file.readlines(): 
    if "NSF" in line: 
     values= line.split(":") 
    elif "Fld" in line: 
     values1 = line.split(":") 

Так ценности и values1 имеет конкретные значения, которые вы intetested

+0

с открытым (filename, 'r') как f: для строки в f.deadlines(): дает мне: файл-объект не имеет крайних сроков атрибута " – NSR

+0

Найти новый код. Это на самом деле строки read. Извините. Autocorrect sucks whenetime. – Arockia

+0

спасибо, что имеет смысл. Я на самом деле googled «крайние сроки» в контексте операций с файлами python, и он забросил мусор. Никогда не думал, что это опечатка! Ваше решение работает, поскольку я получаю требуемые поля. Мне нужно разделить числа и текст из этих строк отдельно, но это очень выполнимо. Кроме того, если -> elif. – NSR

0

Вы можете попробовать что-то вроде

yourtextlist = yourtext.split(':') 
numbers = [] 
for slice in yourtextlist: 
    l = slice.split() 
    try: 
     numbers.append(int(l[0])) 
    except ValueError: 
     pass 
+0

Спасибо. Я пробовал это, но это также экономит КАЖДОЕ число в тексте. Я специально ищу номера, соответствующие полям, упомянутым выше. – NSR