如何根据文本文件中的特定单词过滤特定值并将其存储在列表中?
问题描述:
像我有一个文本文件的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]
谁能告诉如何要做什么。应该为它写些什么代码
答
如果它总是第8列应该可以工作。
如果tr
位置是可变的,你可以做
mylist = []
for line in myfile:
items = line.split()
mylist.append(items[items.index("tr")+1])
答
你的问题不是很清楚。这是你在追求什么?
[line.split()[7] for line in open("abc.txt")]
它从每一行返回第八个“单词”。
答
如果我理解正确的话,这样的事情应该做的工作(未测试):
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])
答
from operator import itemgetter
# tr value is in the 8th column
tr = itemgetter(7)
print map(tr, (line.split() for line in myfile.readlines()))
答
一个可以尝试以下方法:
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']
答
可以将行作为之前tr
和后tr
分割并获得在该第二部分中的第一个字。
[ line.split(' tr ')[1].split()[0] for line in file ]
如果有多于一个的tr
,表达收集后的第一个字。另外,这一个收集最后tr
后词语的一行:
[ line.split(' tr ')[-1].split()[0] for line in file ]
答
会不会是简单的使用正则表达式?
如果“我们”,“RT”,“重”,“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)]
更好'line.split('tr')[1] .split()[0]'。 – 2011-03-17 15:14:21
@junjanes:非常聪明!你应该发布这个答案。 – 2011-03-17 15:15:54
我会留给你,因为你的答案是触发器:) – 2011-03-17 15:17:01