2015-07-07 3 views
-1

Поэтому у меня есть текстовый файл, который структурирован следующим образом:Как получить текст между 2 строкой с питоном

Product ID List: 

ABB: 
578SH8 
EFC025 
EFC967 

CNC: 
HDJ834 
HSLA87 
... 
... 

Этот файл продолжается с именами многих компаний и идентификаторов под ними. Мне нужно затем получить идентификаторы выбранной компании и добавить их в список, где они будут использоваться для поиска на веб-сайте. Вот линия тока я должен получить данные:

PID = open('PID.txt').read().split() 

Это прекрасно работает, если есть только продукт корочки только 1 компании в там и без текста. Это не работает для того, что я планирую делать ... Как я могу прочитать читателя (пример) после того, как он говорит ABB: перед следующей компанией? Я подумал, может быть, добавить что-то вроде файла ABB END, чтобы узнать, где его разрезать, но я до сих пор не знаю, как вырезать между строк в первую очередь ... Если бы вы могли сообщить мне, что бы будь здорово!

+0

Он не должен, это было просто добавить немного удобства для пользователя – Nick

+0

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

+0

Две новые линии служат точкой останова. –

ответ

1

Два последовательных перевода строки действуют как разделители, так просто разделить там построить словарь данных:

data = {i.split()[0]: i.split()[1:] for i in open('PID.txt').read().split('\n\n')} 
1

Поскольку файл структурирован таким образом вы можете выполнить следующие действия:

  1. Сплит на основе двух символов новой строки \n\n в список
  2. Split каждый список на одной новой строки \n
  3. падения первый элемент списка, содержащего идентификаторы для каждой компании
  4. Используйте первый элемент (упомянутый выше), если необходимо, для названия компании (обязательно удалите двоеточие)

Кроме того, посмотрите на regular expressions для синтаксического анализа данных.

1
with open('file.txt', 'r') as f: # open the file 
    next(f) # skip the first line 
    results = {} # initialize a dictionary 
    for line in f: # iterate through the remainder of the file 
     if ':' in line: # if the line contains a : 
      current = line.strip() # strip the whitespace 
      results[current] = [] # and add it as a dictionary entry 
     elif line.strip(): # otherwise, and if content remains after stripping whitespace, 
      results[current].append(line.strip()) # append this line to the relevant list 
+1

Хотя это будет работать красиво, было бы неплохо добавить пару строк или комментариев, чтобы объяснить OP то, что он делает. –

+0

@JRichardSnape, хорошая идея - сделано. – TigerhawkT3

0

Это должно, по крайней мере, чтобы вы начали, вы, вероятно, лучше удачи, используя словари чем списки, по крайней мере, для первой части вашей логики. По какому методу вы пройдете коды?

a = {} 

f1 = open("C:\sotest.txt", 'r') 
current_key = '' 

for row in f1: 
    strrow = row.strip('\n') 


    if strrow == "": 
     pass 
    elif ":" in strrow: 
     current_key = strrow.strip(':') 
     a[current_key] = [] 
    else: 
     a[current_key].append(strrow) 

for key in a: 
    print key 
    for item in a[key]: 
     print item 
Смежные вопросы