2016-04-03 36 views
0

我有很多的.txt文件具有不同的列数(但总是相同数量的每个元素。分裂列出元素进一步

<1,1,1,1,1,> 
<1,2,1,2,1,> 
<2,3,2,3,2,> 
<4,2,4,2,4,> 

因为当我分裂,这是其另存为.txt文件通过

lines = [line.rstrip('\n') for line in f] 

我得到

['<1,1,1,1,1,>', '<1,2,1,2,1,>', '<2,3,2,3,2,>', '<4,2,4,2,4,>'] 

有没有在列表中访问每个元素的简单方法(即INDIVI双号码,所以我可以输出它们)?

回答

2

你可以做到以下几点:

lines = [line.strip('<>,\n').split(',') for line in f] 

它会返回一个包含数字的字符串列表的列表:

[['1', '1', '1', '1', '1'], 
['1', '2', '1', '2', '1'], 
['2', '3', '2', '3', '2'], 
['4', '2', '4', '2', '4']] 

如果你想要的数字为整数,而不是你可以拆分后拨打map一行:

lines = [map(int, line.strip('<>,\n').split(',')) for line in f] 
+0

非常感谢您的帮助niemmi,我想将它转换为整数,但目前我有一个问题,当我运行代码时,有一些不需要的字符,如下所示:[[''],['1 '',[''],['1'],[''],['1'],[''],['1'],[''],['1'],[' ],[''],['\ n']为每行,是否有方法去除['']和['\ n']项? –

+0

我忘记了在代码示例中去掉'\ n'。我修改了响应,如果文件内容与问题中的内容完全相同,那么它现在应该可以工作。 – niemmi

+0

我仍然有问题,以消除所有['']之间的每个数字,这是阻止我使用地图函数来使用字符串作为整数,因为我希望,是否有可能在line.strip中做到这一点?我曾尝试过,但出现错误 –

0

from ast import literal_eval

一旦你这样做lines = [line.rstrip('\n') for line in f]你可以这样做:

linelist = [] 
for line in lines: 
    linelist.append(literal_eval(line.replace("<", "[").replace(">", "]"))) 

这将创建一个列表的列表。对于您提供的示例,您将得到一些与以下内容类似的内容:

[[1, 1, 1, 1, 1], [1, 2, 1, 2, 1], [2, 3, 2, 3, 2], [4, 2, 4, 2, 4]] 

您可以将其用于进一步处理。

或者直接做:

lines = [ literal_eval(line.rstrip('\n').replace("<", "[").replace(">", "]")) for line in f] 

结果将是相同的。

+1

这样做有一定的优雅。但在不受信任的输入上使用'eval'不是一个好主意。改用['ast.literal_eval'](https://docs.python.org/2/library/ast.html#ast.literal_eval)。 –

+0

你很对。也许我应该使用'map'作为[niemmi](http://stackoverflow.com/users/5043793/niemmi)。我会根据你的建议进行编辑。 – Marcus