2012-04-21 62 views
1

我想从文件读取一个逗号分隔值的二维数组到列表中。我有以下问题,我如何摆脱尾随的换行符?这就是我的意思。这是我读过的一行。从一个文件读取二维数组到Python列表

['0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1\n'] 

目前,我已在代码如下:

ins = open("parseTable.txt", "r") 
parseTable = [] 
for line in ins: 
    row = line.split(',') 
    parseTable.append(row) 

谢谢大家的提示。我做了以下工作。 感谢您的所有提示。我做了以下工作。

ins = open("parseTable.txt", "r") 
parseTable = [] 
for line in ins: 
    row = line.split(',') 
    parseTable.append(map(int,line.split(','))) 
+0

也许'ast.literal_eval'可以帮助 – 2012-04-21 12:16:11

+1

@frodo很高兴您发现代码和提示提供了有用的帮助。您可能想要提供您认为有用的答案,并通过选中标记选择其中一个答案作为答案。 – Levon 2012-04-22 00:55:09

回答

1

需要现有的代码唯一的变化是您的线路上使用rstrip()功能,你split()之前。例如,

ins = open("parseTable.txt", "r") # the "r" is not really needed - default 
parseTable = [] 

for line in ins: 
    row = line.rstrip().split(',') # <- note use of rstrip() 
    parseTable.append(row) 

这将消除所要求的尾随换行符。


一个简单的例子,一步一步:

In [2]: s = 'this is a test\n' 

In [3]: s 
Out[3]: 'this is a test\n' 

In [4]: s.rstrip() 
Out[4]: 'this is a test' 

所以为了使更改坚持,你需要进行分配

In [5]: s = s.rstrip() 

In [6]: s = s.split() 

In [7]: s 
Out[7]: ['this', 'is', 'a', 'test'] 

或者一步到位:

In [11]: s = s.rstrip().split() 

In [12]: s 
Out[12]: ['this', 'is', 'a', 'test'] 
+0

乌尔手快... – fanlix 2012-04-21 12:09:56

0
t = [] 
for line in open("txt", "r").readlines(): 
    t.append(line.rstrip().split(',')) 
1

随着with声明,列表理解,和csv模块

import csv 
with open("parseTable.txt") as f: 
    parseTable = [x.rstrip() for x in row for row in csv.reader(f)] 

编辑:

  1. with声明将关闭时异常升高,而开/处理文件时文件自动。在你的情况下可能没有必要,但你应该记住这种可能性。使用上下文管理器是一种很好的做法[More]

  2. 列表理解通常会使您的脚本更快,但有时难以提高可读性。无论如何,你必须了解和使用它。

  3. 我不是说任何东西赞成csv模块或打开具有内置函数的文件和分割行split(',')。这是你的选择,我只是建议替代方案。

+0

这为我工作插件=打开( “parseTable.txt”, “R”) parseTable = [] 在插件线: 行= line.split( '') parseTable.append(map(int,line.split(','))) – frodo 2012-04-21 12:42:13

+0

我加了一些解释 – San4ez 2012-04-21 12:58:13

相关问题