Заменить пробел определенной позиции в текстовом файле на NA - PullRequest
0 голосов
/ 20 мая 2018

У меня есть текстовый файл, подобный этому -

sfdfd
kgfkhgjk
fsdfs
sgsgggggfsdf

Node: RBS6301 CXP102051/26_R30F L17A.4-6 (C17.0_LSV198_PA24)

=================================
col1 clo2 clo3
=================================
1   avb wer21g2
---------------------------------

    =================================
empcode   Emnname   Date       DESC
12d      sf        2018-02-06      dghsjf  hfhgf jfjh
asf2     asdfw2    2018-02-16      fsfsfg  jhjhhjghk
dsf21    sdf2      2016-02-06      sdgfsgf
sdgg     dsds      dkfd-sffddfdf   aaaa
dfd      gfg       dfsdffd         aaaa
df                 dfdf            efefkhgvkjgjk kgkjjk
4fr                                freff klhlkkl
-----------------------------------

hfjh
vkgjlbljkbkjbk/n/l  jhfjhfhj kutiugjm iugiuk
hfhj
fggggggggggggggggggggggg

сверху. Я извлек следующую часть, используя -

import pandas as pd
import csv

findStr = 'empcode   Emnname'
EndStr = '-----------------------------------'
tmp1 = []
tmp = []
tmp2=[]
with open('test123.txt') as f:
    out = []
    for line in f:
        if line.startswith(findStr):
            tmp.append(re.findall('\w+',line.strip()))

            for line in f:
                if line.rstrip()==EndStr:
                    out.append(tmp)
                    break
                tmp.append(re.sub('\s',' ',line.strip()))

f.close()

tmp O / P-

[['empcode', 'Emnname', 'Date', 'DESC'],
 '12d      sf        2018-02-06      dghsjf  hfhgf jfjh',
 'asf2     asdfw2    2018-02-16      fsfsfg  jhjhhjghk',
 'dsf21    sdf2      2016-02-06      sdgfsgf',
 'sdgg     dsds      dkfd-sffddfdf   aaaa',
 'dfd      gfg       dfsdffd         aaaa',
 'df                 dfdf            efefkhgvkjgjk kgkjjk',
 '4fr                                freff klhlkkl']

Тем не менее, я хочу использовать NA в области пробелов. То есть ниже gfg или после 4fr .Может кто-нибудь, пожалуйста, помогите.Это должно быть как -

[['empcode', 'Emnname', 'Date', 'DESC'],
 '12d      sf        2018-02-06      dghsjf  hfhgf jfjh',
 'asf2     asdfw2    2018-02-16      fsfsfg  jhjhhjghk',
 'dsf21    sdf2      2016-02-06      sdgfsgf',
 'sdgg     dsds      dkfd-sffddfdf   aaaa',
 'dfd      gfg       dfsdffd         aaaa',
 'df       NA        dfdf            efefkhgvkjgjk kgkjjk',
 '4fr      NA        NA              freff klhlkkl']

1 Ответ

0 голосов
/ 20 мая 2018

Используйте re, чтобы извлечь искомую часть и использовать Pandas read_fwf считыватель фиксированной ширины.

import re
import pandas as pd

pat = '(empcode   Emnname(.|\n)*)-----------------------------------'
txt = re.findall(pat, open('test123.txt').read())[0][0]
h, b = txt.split('\n', 1)
df = pd.read_fwf(pd.io.common.StringIO(b), header=None, names=h.split())
df

  empcode Emnname           Date                  DESC
0     12d      sf     2018-02-06    dghsjf  hfhgf jfjh
1    asf2  asdfw2     2018-02-16     fsfsfg  jhjhhjghk
2   dsf21    sdf2     2016-02-06               sdgfsgf
3    sdgg    dsds  dkfd-sffddfdf                  aaaa
4     dfd     gfg        dfsdffd                  aaaa
5      df     NaN           dfdf  efefkhgvkjgjk kgkjjk
6     4fr     NaN            NaN         freff klhlkkl

И если по какой-то причине OP действительно хотел вывод списка

[df.columns.tolist()] + df.to_string(header=None, index=None).splitlines()

[['empcode', 'Emnname', 'Date', 'DESC'],
 '12d      sf     2018-02-06    dghsjf  hfhgf jfjh',
 ' asf2  asdfw2     2018-02-16     fsfsfg  jhjhhjghk',
 'dsf21    sdf2     2016-02-06               sdgfsgf',
 ' sdgg    dsds  dkfd-sffddfdf                  aaaa',
 '  dfd     gfg        dfsdffd                  aaaa',
 '   df     NaN           dfdf  efefkhgvkjgjk kgkjjk',
 '  4fr     NaN            NaN         freff klhlkkl']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...