问题是我需要读取text.txt文件并从中获取非常具体的数据。 text.txt的条目看起来像这样
b(1,4,8,1,4,TEST,0,3,AAAA,Test,2-150,000)
a(1,1,3,1,3,BBBB,0,3,BBBB,Test,2-150,000)
a(1,0,2,1,4,TEST,0,3,CCCC,Test,2-150,000)
b(1,1,0,1,4,TEST,0,3,DDDD,Test,2-150,000)
所以现在我只想用那些“a(”和那些我只需要5和8逗号后面的刺,所以在第2行它将是BBBB,BBBB
到目前为止,我的代码是:infile = open("text.txt","r")
numlines = 0
found = []
for line in infile:
numlines += 1
if "a" in line:
line=line[line.find("(")+1:line.find(")")]
found.append(line.split(','))
wordLed=len(found)
for i in range(0,wordLed):
print found[i]
infile.close()
这只是给了我在“,”分隔的全部线条,但我怎么能索引它们呢?
答案 0 :(得分:4)
quick short and dirty:
with open('text.txt') as f:
result = [line.split(',')[5:9:3] for line in f if line.startswith("a(")]
# ^^^^^^^
# "5 to 9 (excl.) by step of 3"
# that is items 5 and 5+3
#
# replace by [5] if you only want the fifths item
# replace by [5:9] if you want items from 5 to 9 (excl.)
from pprint import pprint
pprint(result)
由于缺少错误处理,脏 ...
...无论如何,根据你的样本数据,这会产生:
[['BBBB', 'BBBB'], ['TEST', 'CCCC']]
答案 1 :(得分:3)
我会使用readlines函数:
with open("data.txt","r") as f:
lines = f.readlines()
for line in lines:
if line[0:2] == 'a(':
data1 = line.split(',')[5]
data2 = line.split(',')[8]
print(data1, data2)
f.close()
答案 2 :(得分:1)
您应该在开始时检查完整条件,即a(
而不是a
。您还可以使用split来根据,
:
infile = open("text.txt","r")
for line in infile:
if line.startswith("a("): # Starts with a(
data = line.split(',')
print data[5] # Print data at place 5
print data[8] # Print data at place 8
infile.close()
答案 3 :(得分:1)
for line in [l for l infile if l.startswith('a(')]
line = line[line.find('('):].strip('()\n').split(',')
a_field, other_field = line[5], line[8]
您已经拆分了字符串,只需索引到列表中即可获得所需的字段。