就像我有一个文本文件abc.txt,就像这样
we 2 rt 3 re 3 tr vh kn mo
we 3 rt 5 re 5 tr yh kn me
we 4 rt 6 re 33 tr ph kn m3
we 5 rt 9 re 34 tr oh kn me
we 6 rt 8 re 32 tr kh kn md
现在我想要反对tr的值,过滤后它应该得到这个结果
[vh,yh,ph,oh,kh]
任何人都可以告诉我们该怎么做。应该为它写什么代码
答案 0 :(得分:2)
mylist = [line.split()[7] for line in myfile]
如果它始终是第8列,应该有用。
如果tr
的位置可变,您可以
mylist = []
for line in myfile:
items = line.split()
mylist.append(items[items.index("tr")+1])
答案 1 :(得分:2)
您可以在 tr
之前将分割为,在 tr
之后将分割为,并获取第二部分中的第一个字。
[ line.split(' tr ')[1].split()[0] for line in file ]
如果有多个tr
,则表达式会在第一个之后收集该单词。或者,这个收集行中最后一个tr
之后的单词:
[ line.split(' tr ')[-1].split()[0] for line in file ]
答案 2 :(得分:1)
你的问题不太清楚。这是你想要的吗?
[line.split()[7] for line in open("abc.txt")]
它从每一行返回第八个“单词”。
答案 3 :(得分:0)
如果我理解正确,这样的事情应该完成工作(未经测试):
resultArray = []
for aString in yourFile:
anArray = aString.split()
for i in range(0, len(anArray) - 1): //-1 in case tr is at the end of array
if anArray[i] == 'tr':
resultArray.append(anArray[i + 1])
答案 4 :(得分:0)
from operator import itemgetter
# tr value is in the 8th column
tr = itemgetter(7)
print map(tr, (line.split() for line in myfile.readlines()))
答案 5 :(得分:0)
可以尝试以下方法:
def filter_words(filename, magic_word):
with open(filename) as f:
all_words = f.read().strip().split()
filtered_words = []
i = 0
while True:
try:
i = all_words.index(magic_word, i) + 1
filtered_words.append(all_words[i])
except IndexError, ValueError:
break
return filtered_words
如果'tr'恰好是提供的文本文件中的最后一个单词,则此算法不会失败。
示例:
>>> filter_words('abc.txt', 'tr')
['vh', 'yh', 'ph', 'oh', 'kh']
答案 6 :(得分:0)
使用正则表达式会不会更简单?
如果'我们','rt','re','tr'在他们的位置真的不变:
import re
ch = '''
we 2 rt 3 re 3 tr vh kn mo
we 3 rt 5 re 5 tr yh kn me
we 4 rt 6 re 33 tr ph kn m3
we 5 rt 9 re 34 tr oh kn me
we 6 rt 8 re 32 tr kh kn md'''
print re.findall('(?<= tr )([^ ]+)',ch)
如果没有,那么该职位将成为确定要抓住什么的标准:
import re
ch = '''
we 2 rt 3 re 3 tr vh kn mo
we 3 rt 5 re 5 tr yh kn me
we 4 rt 6 re 33 tr ph kn m3
we 5 rt 9 re 34 tr oh kn me
we 6 rt 8 re 32 tr kh kn md'''
print [ mat.group(1)
for mat in re.finditer('^(?:\w+ \d+ ){3}\w+ ([^ ]+) .+',ch,re.M)]