Скрипт Looping для извлечения определенных данных из текстового файла - PullRequest
0 голосов
/ 01 июля 2019

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

----------------------------------
Local Cell ID  Cell Name                        Physical cell ID  Additional spectrum emission  Cell active state  Cell admin state  Cell middle block timer(min)  Cell FDD TDD indication  Subframe assignment  Special subframe patterns  

11             12345678912345678912345678912    427               1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
12             12345678912345678912345678912    130               1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
14             12345678912345678912345678912    94                1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
15             12345678912345678912345678912    37                1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
21             12345678912345678912345678912    188               1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
22             12345678912345678912345678912    203               1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
24             12345678912345678912345678912    209               1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
25             12345678912345678912345678912    230               1                             Active             Unblock           NULL                          TDD                      SA2                  SSP6                       
(Number of results = 8)


---    END

Я использовал приведенный ниже скрипт для извлечения каждой строки с определенным значением, но мне интересно, можно ли было бы просто извлечь данные в разделах «Имя ячейки» и «Физический идентификатор ячейки», которые для строки 4 были бы 12345678912345678912345678912 и 427.

signal = open('signal.txt', 'r') 
newFile = open('results2.txt', 'w') 
for line in signal: 
    if 'False' in line: 
        print('.', end="") 
        newFile.write(line) 
    else: 
        print(" ", end="") 
newFile.close() 
signal.close() 
print('Done')

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

см. Другой метод ниже. Вы можете перебрать строки в текстовом файле signal.txt, а затем вызвать функцию поиска, чтобы получить CellName или PhysicalCellID.

import re
import pandas as pd
mydicts = []

def FindCellName(line):#create a function looking at each line
    CellName=None #empty the variable
    j=re.findall('\d{29}', line) #find string with 29 characters
    if len(j)>0:
            CellName=j[0] #if it exists assign it to CellName
    return CellName

def FindPhysicalCellID(line):#create a function looking at each line
    PhysicalCellID=None #empty the variable
    res= re.search('\d{29}(.*)               1', line) #find string after the 29 characters and before the 1
    if res:
            PhysicalCellID=res.group(1) #if it exists assign it to PhysicalCellID
    return PhysicalCellID

with open('signal.txt') as topo_file:
    for line in topo_file:
        if FindCellName(line) : #if CellName exists 
            mydicts.append((FindCellName(line), FindPhysicalCellID(line))) # append CellName and PhysicalCellID in the diction
    df=pd.DataFrame(mydicts, columns=('CellName', 'PhysicalCellID'))
df

результат ниже:

CellName    PhysicalCellID
0   12345678912345678912345678912   427
1   12345678912345678912345678912   130
2   12345678912345678912345678912   94
3   12345678912345678912345678912   37
4   12345678912345678912345678912   188
5   12345678912345678912345678912   203
6   12345678912345678912345678912   209
7   12345678912345678912345678912   230
​
0 голосов
/ 01 июля 2019

@J.Byrne, другой метод, будет использовать pandas dataframe read_csv для извлечения данных (игнорировать строку 1 и нижние данные, добавить имена столбцов) и выбрать интересующие вас столбцы.дюймы

см. этот код для извлечения:

import pandas as pd
df=pd.read_csv('signal.txt', skiprows=2,skipfooter=4, sep='\s+', 
            names=[
                'Local Cell ID',  
                'Cell Name',                        
                'Physical cell ID',  
                'Additional spectrum emission',  
                'Cell active state',  
                'Cell admin state',  
                'Cell middle block timer(min)',  
                'Cell FDD TDD indication',  
                'Subframe assignment',  
                'Special subframe patterns'], 
            engine='python')

df

Результат здесь:

Local Cell ID   Cell Name   Physical cell ID    Additional spectrum emission    Cell active state   Cell admin state    Cell middle block timer(min)    Cell FDD TDD indication Subframe assignment Special subframe patterns
0   11  12345678912345678912345678912   427 1   Active  Unblock NaN TDD SA2 SSP6
1   12  12345678912345678912345678912   130 1   Active  Unblock NaN TDD SA2 SSP6
2   14  12345678912345678912345678912   94  1   Active  Unblock NaN TDD SA2 SSP6
3   15  12345678912345678912345678912   37  1   Active  Unblock NaN TDD SA2 SSP6
4   21  12345678912345678912345678912   188 1   Active  Unblock NaN TDD SA2 SSP6
5   22  12345678912345678912345678912   203 1   Active  Unblock NaN TDD SA2 SSP6
6   24  12345678912345678912345678912   209 1   Active  Unblock NaN TDD SA2 SSP6
7   25  12345678912345678912345678912   230 1   Active  Unblock NaN TDD SA2 SSP6

Используйте это для фильтрации:

df[["Cell Name","Physical cell ID"]]

Результатздесь:

Cell Name   Physical cell ID
0   12345678912345678912345678912   427
1   12345678912345678912345678912   130
2   12345678912345678912345678912   94
3   12345678912345678912345678912   37
4   12345678912345678912345678912   188
5   12345678912345678912345678912   203
6   12345678912345678912345678912   209
7   12345678912345678912345678912   230
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...