извлечение позиций из списка на основе значений в позициях - PullRequest
1 голос
/ 23 декабря 2019

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

До сих пор я был в состоянии взять файл, открыть его для чтения инапишите, а затем разбейте каждую строку на элемент списка. Сейчас я пытаюсь найти позицию каждого элемента списка, которая начинается с «03». Все от одной позиции списка «03» до другой - это то, что в конечном итоге будет отдельным файлом. Я застрял в попытке извлечь позиции списка, где значение списка содержит «03». Я попытался использовать:

for value in acct_locate:
    if value == '03':
        locations.append(acct_locate.index(value))

Кажется, что ничего не возвращается, и я попробовал некоторые другие версии enumerate() и index().

В настоящее время здесь мой код, который яя работаю с:

import re
#need to look for file name
filename = 'examplebai2.txt'

#this list will store all locations where three record shows up
acct_locate = []
locations = []
acct_listing = []

with open(filename, 'r+') as file:
    line = [line.rstrip('\n') for line in file]
    for x in line:
        #locate all instances of locations starting with '03'
        look = re.findall('^03', x)
        acct_locate.append(look)
        #add those instances to a new list
    a = [i for i,x in enumerate(acct_locate) if x == '03']
    for value in a:
        print(value)
        locations.append(acct_locate.index(value))
    for y in line:
        namelist = re.findall('^03, (.*),', y)
        if len(namelist) > 0:
            acct_listing.append(namelist)

Запуск приведенного выше кода ничего не вернет в список locations, который я использую для сбора всех местоположений.

Вот скелет файлаЯ пытаюсь манипулировать.

01, Testfile
02, Grouptest
03, 11111111
16
88
49
03, 22222222,
16
88
49
03, 33333333,
16
88
49
03, 44444444,
16
88
49
98, Grouptestclose
99, Testfileclose

Из этого файла я хотел бы закончить четырьмя отдельными файлами, которые содержат от одной 03 записи до следующей 03 записи.

Ответы [ 2 ]

1 голос
/ 23 декабря 2019

Если вам не нужно знать позиции ваших специальных символов, которые вы могли бы сделать:

with open('examplebai2.txt', 'r') as file:
    data = file.read().replace('\n', ' ')

data = data.split('03')

объяснение : первые два оператора читают файл, удаляют все символы новой строки иположить результат в одну строку «данные». Последний оператор разделяет строку при появлении вашего "специального символа" '03', возвращая список строк, где каждый элемент представляет собой часть между двумя '03'.

РЕДАКТИРОВАТЬ:

Учитывая приведенный выше пример данных, вы можете попробовать зациклить файл и поместить прочитанные данные в буфер. Каждый раз, когда вы найдете '03', очистите буфер в новый файл. Пример:

buffer = ""
new_file_counter = 0
with open(filename,'r+') as file:
    ## loop over lines
    for x in file:
        if x.split(',')[0] == '03':
            with open('out_file_{}'.format(new_file_counter)) as out:
                out.write(buffer)
                buffer = ""
                new_file_counter = 0
        buffer += x


0 голосов
/ 25 декабря 2019

Если вы хотите «найти все экземпляры локаций, начинающиеся с« 03 »», вам следует поставить галочку x.startswith("03") вместо x == "03".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...