이것은 내 파이썬 코드입니다. 이 코드에서 str1 필드에는 사용자 명령 (w)의 출력이 포함됩니다. 마지막 필드 (WHAT)에는 하나 이상의 공백이 포함될 수 있습니다. 명령 (w)의 출력에서 목록을 만들려고합니다.
문제 : 두 번째 행에서 예상 출력을 얻지 못하기 때문에 FROM 필드에 값이 없습니다. (FROM 필드)에 값이 포함되어 있으면 예상 출력이 표시됩니다.
암호:
import re
lista, listb, list_final =[],[],[]
str1 = '''17:36:34 up 17 days, 1:48, 3 users, load average: 6.33, 5.37, 5.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Arul abc/0 10.XXX.XX.X1 14:41 2:31m 2.04s 1.97s ssh [email protected]
Peter abc/1 17:36 1.00s 0.08s 0.02s w
Joe abc/3 10.XXX.XX.X3 13:59 2:41m 4:38 0.08s /opt/ google / chrome/chrome'''
str1 = re.sub(' +', ' ', str1)
lista = str1.splitlines ()
lista = lista[2:]
listb=[re.split(" ", el, maxsplit=7) for el in lista]
print (listb)
위의 코드는 아래와 같은 결과를 생성합니다.
[['Arul', 'abc/0', '10.XXX.XX.X1', '14:41', '2:31m', '2.04s', '1.97s', 'ssh [email protected]'],
['Peter', 'abc/1', '17:36', '1.00s', '0.08s', '0.02s', 'w'],
['Joe', 'abc/3', '10.XXX.XX.X3', '13:59', '2:41m', '4:38', '0.08s', '/opt/ google / chrome/chrome']]
다음과 같은 결과를 기대하고 있습니다. (필드 (FROM)에 null 값이 포함 된 경우 목록 출력에 동일한 값을 입력해야합니다.
예상 결과 :
[['Arul', 'abc/0', '10.XXX.XX.X1', '14:41', '2:31m', '2.04s', '1.97s', 'ssh [email protected]'],
['Peter', 'abc/1', ' ', '17:36', '1.00s', '0.08s', '0.02s', 'w'],
['Joe', 'abc/3', '10.XXX.XX.X3', '13:59', '2:41m', '4:38', '0.08s', '/opt/ google / chrome/chrome']]
lista, listb, list_final = [], [], []
str1 = '''17:36:34 up 17 days, 1:48, 3 users, load average: 6.33, 5.37, 5.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Arul abc/0 10.XXX.XX.X1 14:41 2:31m 2.04s 1.97s ssh [email protected]
Peter abc/1 17:36 1.00s 0.08s 0.02s w
Joe abc/3 10.XXX.XX.X3 13:59 2:41m 4:38 0.08s /opt/ google / chrome/chrome'''
lista = str1.splitlines()
first_row = lista[1]
indices = [first_row.index(x) for x in first_row.split()]
lista = lista[2:]
lines_splitted = []
#split according to first line
for line in lista:
l = []
for i in range(0, len(indices) - 1):
l.append(line[indices[i]:indices[i + 1]])
l.append(line[indices[-1]:])
lines_splitted.append(l)
# adjust whitespaces
for index in range(0, 8):
for line_splitted in lines_splitted:
if line_splitted[index].isspace():
lengths = [len(x[index].strip()) for x in lines_splitted]
max_length = max(lengths)
line_splitted[index] = line_splitted[index].strip() + ' ' * max_length
# remove others whitespaces
for index in range(0, 8):
for line_splitted in lines_splitted:
if not line_splitted[index].isspace():
line_splitted[index] = line_splitted[index].strip()
print(*lines_splitted, sep='\n')
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다