2015-02-11 46 views
1

我有一个数字的这个列表中的文件数:如何在列表中选择元组的项目?

[(1, 1)] 
[(11, 11)] 
[(157, 208)] 
[(222, 224)] 
[(239, 239)] 
[(265, 268)] 

,我想打印的项目,如变量的这样一个值:

x = 1 
y = 1 

,然后:回归到下一行

x= 11 
y = 11 

回报:

x=157 
y=208 

有可能吗?

我的代码是:

fhand=open('list.log') 
    for lines in fhand: 
    print lines 
    print (lines[1:1]) 

import re 
fhand=open('list.log') 
for line in fhand: 
    line=line.split() 
    number=map(lambda line: line.split()[0], line) 
    print number 

我和拉姆达,地图,过滤试过......但我不知道在这段代码什么机会。请有人可以帮我吗?有人可以告诉我该怎么办?

回答

2

您可以使用ast.literal_eval,解开每个项目访问使用str.format存储每个列表和打印里面的元组:如果你想存储的所有元组的列表

from ast import literal_eval 
with open('list.log') as f: 
    for line in f: 
     a,b = literal_eval(line.rstrip())[0] 
     print("x = {}\ny = {}".format(a,b)) 
x = 1 
y = 1 
x = 11 
y = 11 
x = 157 
y = 208 
x = 222 
y = 224 
x = 239 
y = 239 
x = 265 
y = 268 

tups = [literal_eval(line.rstrip())[0] for line in f] 
print(tups) 
[(1, 1), (11, 11), (157, 208), (222, 224), (239, 239), (265, 268)] 

ast.literal_eval

安全评估表达式节点或Unicode或Latin-1编码的字符串c包含Python文字或容器显示。提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,字典,布尔值和无。

做手工,你将需要指数2:-2剥离后换行,各执,map为int:

for line in f: 
    a,b =(map(int,line.rstrip()[2:-2].split(","))) 
    print("x = {}\ny = {}".format(a,b)) 

或者使用str.translate删除逗号,括号等。 :

with open('list.log') as f: 
     for line in f: 
     a,b = map(int,line.translate(None,"()[],").split()) 
     print("x = {}\ny = {}".format(a,b)) 
+0

为什么我的代码只能剥掉四个字符中的两个? – 2015-02-11 21:55:01

+0

@MalikBrahimi因为你忘记了换行符,'parse = line.strip('()[] \ n')。split(',')' – 2015-02-11 21:58:27

+0

这也行不通。它实际上切换到另外两个字符。 – 2015-02-11 21:59:06

1
with open('list.log') as log: 
    for line in log: 
     parse = line.strip('()[]\n').split(',') 
     print 'x = %s' % parse[0] 
     print 'y = %s' % parse[1] 
0

如何:

for line in fhand: 
    line = line.strip(); # trim off any leading or extra whitespace including newline 
    line = line[2:-2] # trim off the leading [(and trailing)] chars 
    parsed_line = line.split(',') # convert to list 
    print('x =',parsed_line[0].strip()) 
    print('y =',parsed_line[1].strip()) 
+0

你将需要额外的''''你需要在索引前去掉换行符 – 2015-02-11 22:01:34

+0

@PadraicCunningham - 很好的结果。固定。 – selbie 2015-02-12 14:52:37