2017-03-18 564 views
1

我正在嘗試讀取.txt文件並將其附加到列表中的列表中,但我遇到了此問題。Python:讀取帶負數的文件

ValueError異常:無效字面對於int()與底座10: ' - '

在其中我的代碼是這樣的:

def readfiles(filename): 
    with open(filename) as f: 
     content = f.readlines() 
    matrix=[] 
    tem=[] 
    for i in range(len(content)): 
     tem=[] 
     content[i] = content[i].replace('\n','') 
     content[i] = content[i].replace(',', '') 
     for j in range(len(content[i])): 
      tem.append(int(content[i][j])) 
     matrix.append(tem) 

    return matrix 

,但如果我更換tem.append( INT(內容[i] [j]))tem.append(內容[i] [j])

列表顯示爲不同這在某種程度上是這樣的:

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

我想讓我的函數從文件中讀取負值。有人能幫忙嗎 ?

我的.txt文件是這樣的:

3,-2,1 
4,-1,0 
0,2,1 
+0

你爲什麼遍歷每行中的字符?另外,附註:不要遍歷'範圍(len(...))',永遠。你能舉一個例子說明你的文件是怎樣的嗎? – L3viathan

+1

你可以編輯問題以包含你的文本文件的樣子嗎? –

+0

@MartinEvans我附上了一個文本文件示例 –

回答

1

我猜,這會工作:

def readfiles(filename): 
    with open(filename) as f: 
     return [[int(num) for num in line.split(",")] for line in f] 

您遇到的問題是,你遍歷你的線(這是一個字符串),讓你的單個字符,而不是「之間的東西「:

假設當前行(content[i])爲"3,-2,1"。 在此之後:

content[i] = content[i].replace(',', '') 

content[i]現在"3-21"。它應該如何知道你的號碼是什麼?遍歷該字符串會給你"3", "-", "2", "1",其中"-"會導致異常被拋出。

+0

謝謝!它解決了我的問題! –

1

如果你有例如像這樣的字符串:

numbers = "-6, 3, -3, 18"

你總是可以這樣做:

print [int(n) for n in numbers.split(',')]

得到:

[-6, 3, -3, 18]

也許你需要改變處理您的文件的方式,請添加extrat向我們展示了這些數字是如何在其中。