2016-02-17 2 views
1

Я читаю приведенный выше .txt-файл, в котором я должен идентифицировать эти три письма типа (ARW, CZC, DUN и т. Д.). Позже я должен прочитать идентификаторы тестового примера, такие как VR-GREQ .... до следующего языка. но у меня проблема при чтении этого .txt-файла. Ниже мой код:как читать файл с помощью python?

with open(output_filename) as parser_file: 
     for language in parser_file: 
      language = language.strip() 
      if(re.search('[A-Z]', language)): 
       lines = parser_file.readlines() 

я должен дальше код, может кто-то пожалуйста, помогите мне?

мой новый код: выходной_файл = г "C: \ Usersktop \ TEST \ Language \ output.txt" четкости записи():

rx = r'^([A-Z]{3})$' 

# define a dictionary for the languages 
    languages = {} 
    # looks for exactly three uppercase letters from beginning to end 

    # define a temporary list 
    tmp = list() 
    for line in open(output_filename, 'r+'): 
     m = re.search(rx, line, re.MULTILINE) 
     if m is not None: 
      if len(tmp) > 0: 
       languages[current] = tmp 
      tmp = list() 
      current = m.group(1) # current holds the actual language tag 
     else: 
      if len(line) > 0: 
       tmp.append(line.strip()) 

    # after the loop 
    if len(tmp) > 0: 
     languages[current] = tmp 
    print languages 
+1

Я не уверен, что именно вы хотите сделать с этими данными. – GarethPW

+0

Например - я хочу читать ARW со всеми этими идентификаторами: ARW VR-GREQ-299684_6j VR-GREQ-299684_6k VR-GREQ-299606_3 VR-GREQ-299606_4 VR-GREQ-299606_5 VR-GREQ-299606_7 VR-GREQ-299606_9 VR-GREQ-299607_4 VR-GREQ-299608_1 VR-GREQ-299563_10 – sam

ответ

1

Если вам нужно найти строки длиной 3, то используйте [AZ] {3}. Вы можете разбить весь список на массивы на основе расположения этих трехзначных слов.

EDIT: ответ на ваш комментарий ...

headers=re.split('[A-Z]{3}\n',YOUR_STRING) найдет "заголовок" для каждого раздела. Тогда вы можете сделать NEW_STRING=YOUR_STRING[YOUR_STRING.find(headers[0]):YOUR_STRING.find(headers[1])]

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

+0

спасибо. можете ли вы рассказать мне, как читать идентификаторы языков. ARW, CZC, DUN и т. Д. - это языки. – sam

+0

можете ли вы правильно обновить этот код. – sam

0

С помощью ваших комментариев, вопрос стал яснее. Рассмотрим следующий код:

import re 

string = your_string_as_above 
rx = r'^([A-Z]{3})$' 

# define a dictionary for the languages 
languages = {} 

# define a temporary list 
tmp = list() 
for line in re.split(r'\n', string): 
    m = re.search(rx, line, re.MULTILINE) 
    if m is not None: 
     if len(tmp) > 0: 
      languages[current] = tmp 
     tmp = list() 
     current = m.group(1) # current holds the actual language tag 
    else: 
     if len(line) > 0: 
      tmp.append(line.strip()) 

# after the loop 
if len(tmp) > 0: 
    languages[current] = tmp 
print languages 

""" prints out a dictionary with the language as key 
{'FRC': ['VR-GREQ-299659_18', 'VR-GREQ-299659_19', 'VR-GREQ-299659_28', 'VR-GREQ-299659_31', 'VR-GREQ-299659_32'], 'CZC': ['VR-GREQ-299684_6k', 'VR-GREQ-299606_6', 'VR-GREQ-299606_8', 'VR-GREQ-299640_1', 'VR-GREQ-299640_5', 'VR-GREQ-299640_6', 'VR-GREQ-299640_7'], 'DUN': ['FB_71125_1'], 'ARW': ['VR-GREQ-299684_6j', 'VR-GREQ-299684_6k', 'VR-GREQ-299606_3', 'VR-GREQ-299606_4', 'VR-GREQ-299606_5', 'VR-GREQ-299606_7', 'VR-GREQ-299606_9', 'VR-GREQ-299607_4', 'VR-GREQ-299608_1', 'VR-GREQ-299563_10']} 
"""" 

См a demo on ideone.com.

+0

get error as: lines = parser_file.readlines() ValueError: Смешение итераций и методов чтения потеряют данные – sam

+0

@sam: оставьте это - вы получаете что-нибудь в 'code'? – Jan

+0

нет !! Я хочу определить языки, а затем я хочу читать все идентификаторы до следующих языков, но я не могу этого сделать. не могли бы вы рассказать мне, как это сделать? – sam

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