2012-04-21 60 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

相關問題