Python在多个逗号后面获取String

时间:2014-08-26 14:02:54

标签: python

问题是我需要读取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()

这只是给了我在“,”分隔的全部线条,但我怎么能索引它们呢?

4 个答案:

答案 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]

您已经拆分了字符串,只需索引到列表中即可获得所需的字段。