如何去除 python 中的多个字符串
How to strip mutiple strings in python
我有列表(在文本文件中)
<info> app: Bid=B2,Bts=3,VAL=-90
<info> app: Bid=B2,Bts=4,VAL=-91
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=6,VAL=-91
<info> app: Bid=B2,Bts=7,VAL=-77
<info> app: Bid=B2,Bts=7,VAL=-82
<info> app: Bid=B2,Bts=8,VAL=-88
我希望我的输出是这样的,
[['B2', '3', '-90'],
['B2', '4', '-91'],
['B2', '5', '-92'],
['B2', '5', '-92'],
['B2', '6', '-91'],
['B2', '7', '-77'],
['B2', '7', '-82'],
['B2', '8', '-88']]
我试过这段代码,但我无法剥离我想要的东西。
with open('list.txt', 'r') as f:
d = f.readlines()
k = []
for i in d:
m=i.strip('<info> app:').strip('Bid=').strip('Bts=').strip('VAL=').strip('\n').split(',')
k.append(m)
print (k)
如何剥离我想要的东西??我错过了什么??
提前致谢!
str.strip
does not create structure; it merely removes the characters you indicate (by default, whitespace) from either end of a string. You're looking for something to parse your formatted fields, a notably more complex task. One possible example (using a regular expression) 可能是:
>>> a
['<info> app: Bid=B2,Bts=7,VAL=-77',
'<info> app: Bid=B2,Bts=7,VAL=-82',
'<info> app: Bid=B2,Bts=8,VAL=-88']
>>> import re
>>> fieldextractor=re.compile(' Bid=([^,]*),Bts=([^,]*),VAL=(.*)$')
>>> [fieldextractor.search(line).groups() for line in a]
[('B2', '7', '-77'), ('B2', '7', '-82'), ('B2', '8', '-88')]
拆分为 ,
,然后拆分为 =
,最后拆分为 =
.
之后的内容
with open('list.txt', 'r') as f:
d = f.readlines()
k = []
for i in d:
k.append([j.split("=")[1] for j in i.split(",")])
print (k)
这是您尝试编写的 for 循环版本:
src='''<info> app: Bid=B2,Bts=3,VAL=-90
<info> app: Bid=B2,Bts=4,VAL=-91
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=6,VAL=-91
<info> app: Bid=B2,Bts=7,VAL=-77
<info> app: Bid=B2,Bts=7,VAL=-82
<info> app: Bid=B2,Bts=8,VAL=-88'''
lines = src.split('\n')
k = []
for line in lines:
bbv = line.split('app:')[1] # split on 'app:' so that nothing in <info> interferes
items = bbv.split(',')
contents = [item.split('=')[1] for item in items]
k.append(contents)
print(k)
输出:
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]
具有re.search()
功能:
import re
with open('list.txt') as f:
result = []
pat = re.compile(r'Bid=([^,]+),Bts=(\d+),VAL=([^\s]+)')
for r in f:
result.append(list(pat.search(r).groups()))
print(result)
输出:
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]
您可以使用正则表达式打印所需的输出,
import re
with open('list.txt', 'r') as f:
d = f.readlines()
k = []
for i in d:
#m=i.strip('<info> app:').strip('Bid=').strip('Bts=').strip('VAL=').strip('\n').split(',')
p = re.compile(r'Bid=(.*),Bts=(.*),VAL=(.*)')
m = p.search(i)
k.append([m.group(1), m.group(2), m.group(3)])
print (k)
和输出,
root@localhost [ ~ ]# python t.py
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]
这样做就可以了:
lines = [
'<info> app: Bid=B2,Bts=3,VAL=-90',
'<info> app: Bid=B2,Bts=4,VAL=-91'
]
res = [[part.split('=')[1] for part in line.split(',')] for line in lines]
print(res)
您可以使用这个正则表达式 - <info> app: Bid=(\w+),Bts=(\d+),VAL=(-\d+)
result = []
regex = r'<info> app: Bid=(\w+),Bts=(\d+),VAL=(-\d+)'
with open('list.txt', r) as file:
for line in file.readlines():
result += re.findall(regex, line)
我有列表(在文本文件中)
<info> app: Bid=B2,Bts=3,VAL=-90
<info> app: Bid=B2,Bts=4,VAL=-91
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=6,VAL=-91
<info> app: Bid=B2,Bts=7,VAL=-77
<info> app: Bid=B2,Bts=7,VAL=-82
<info> app: Bid=B2,Bts=8,VAL=-88
我希望我的输出是这样的,
[['B2', '3', '-90'],
['B2', '4', '-91'],
['B2', '5', '-92'],
['B2', '5', '-92'],
['B2', '6', '-91'],
['B2', '7', '-77'],
['B2', '7', '-82'],
['B2', '8', '-88']]
我试过这段代码,但我无法剥离我想要的东西。
with open('list.txt', 'r') as f:
d = f.readlines()
k = []
for i in d:
m=i.strip('<info> app:').strip('Bid=').strip('Bts=').strip('VAL=').strip('\n').split(',')
k.append(m)
print (k)
如何剥离我想要的东西??我错过了什么?? 提前致谢!
str.strip
does not create structure; it merely removes the characters you indicate (by default, whitespace) from either end of a string. You're looking for something to parse your formatted fields, a notably more complex task. One possible example (using a regular expression) 可能是:
>>> a
['<info> app: Bid=B2,Bts=7,VAL=-77',
'<info> app: Bid=B2,Bts=7,VAL=-82',
'<info> app: Bid=B2,Bts=8,VAL=-88']
>>> import re
>>> fieldextractor=re.compile(' Bid=([^,]*),Bts=([^,]*),VAL=(.*)$')
>>> [fieldextractor.search(line).groups() for line in a]
[('B2', '7', '-77'), ('B2', '7', '-82'), ('B2', '8', '-88')]
拆分为 ,
,然后拆分为 =
,最后拆分为 =
.
with open('list.txt', 'r') as f:
d = f.readlines()
k = []
for i in d:
k.append([j.split("=")[1] for j in i.split(",")])
print (k)
这是您尝试编写的 for 循环版本:
src='''<info> app: Bid=B2,Bts=3,VAL=-90
<info> app: Bid=B2,Bts=4,VAL=-91
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=5,VAL=-92
<info> app: Bid=B2,Bts=6,VAL=-91
<info> app: Bid=B2,Bts=7,VAL=-77
<info> app: Bid=B2,Bts=7,VAL=-82
<info> app: Bid=B2,Bts=8,VAL=-88'''
lines = src.split('\n')
k = []
for line in lines:
bbv = line.split('app:')[1] # split on 'app:' so that nothing in <info> interferes
items = bbv.split(',')
contents = [item.split('=')[1] for item in items]
k.append(contents)
print(k)
输出:
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]
具有re.search()
功能:
import re
with open('list.txt') as f:
result = []
pat = re.compile(r'Bid=([^,]+),Bts=(\d+),VAL=([^\s]+)')
for r in f:
result.append(list(pat.search(r).groups()))
print(result)
输出:
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]
您可以使用正则表达式打印所需的输出,
import re
with open('list.txt', 'r') as f:
d = f.readlines()
k = []
for i in d:
#m=i.strip('<info> app:').strip('Bid=').strip('Bts=').strip('VAL=').strip('\n').split(',')
p = re.compile(r'Bid=(.*),Bts=(.*),VAL=(.*)')
m = p.search(i)
k.append([m.group(1), m.group(2), m.group(3)])
print (k)
和输出,
root@localhost [ ~ ]# python t.py
[['B2', '3', '-90'], ['B2', '4', '-91'], ['B2', '5', '-92'], ['B2', '5', '-92'], ['B2', '6', '-91'], ['B2', '7', '-77'], ['B2', '7', '-82'], ['B2', '8', '-88']]
这样做就可以了:
lines = [
'<info> app: Bid=B2,Bts=3,VAL=-90',
'<info> app: Bid=B2,Bts=4,VAL=-91'
]
res = [[part.split('=')[1] for part in line.split(',')] for line in lines]
print(res)
您可以使用这个正则表达式 - <info> app: Bid=(\w+),Bts=(\d+),VAL=(-\d+)
result = []
regex = r'<info> app: Bid=(\w+),Bts=(\d+),VAL=(-\d+)'
with open('list.txt', r) as file:
for line in file.readlines():
result += re.findall(regex, line)