2012-10-04 56 views
0

我有一個.txt文件,其格式爲「subject,value,workload」,格式爲「dict [subect]:(value,工作量)。這是我這樣做代碼:解析文本文件中的行問題

for line in inputFile: 
     lineList.append(line.split(",", 3)) 
for i in range(0, len(lineList)): 
     subjectDict[lineList[i][0]] = (lineList[i][1], lineList[i][2]) 
     print subjectDict[lineList[i][0]] 

然而,運行程序,我subjectDict值在這種格式的元組返回:「‘6’,‘2 \ r \ n’」這個業務是什麼?我假設它與文本文件中的換行符有關,這就是爲什麼我首先在​​分割方法中放入3個最大值的原因,但它似乎將2 \ r \ n解釋爲一個字符串。此外,有沒有把每個元組,這些列表項爲整數更有效的方式,或者我應該只是做:

subjectDict[lineList[i][0]] = (int(lineList[i][1]), int(lineList[i][2])) 

感謝。

回答

1

執行以下操作:

for line in inputFile: 
     lineList.append(line.strip().split(",", 3)) 
for i in range(0, len(lineList)): 
     subjectDict[lineList[i][0]] = (lineList[i][1], lineList[i][2]) 
     print subjectDict[lineList[i][0]] 

剝離法將擺脫在字符串的開頭和末尾任何空白(包括\ r \ n個字符)的。 \ r \ n是行結尾(\ r \ n表示您可能打開一個Windows文件,Linux/Mac文件通常使用\ n作爲行結尾)。

據我所知int(someStrVar)是轉換爲整數的最有效方式。

假設你已經在這個lineList沒有興趣後,你可以做到以下幾點:

for line in inputFile: 
     lineSplit = line.strip().split(",", 3) 
     subjectDict[lineSplit [0]] = (lineSplit [1], lineSplit [2]) 
     print subjectDict[lineSplit [0]] 
+2

此外,沒有必要兩次遍歷此循環。 –

+1

'rstrip(「\ r \ n」)'更直觀。 – squiguy

+1

我假設他不需要任何空白,你是對的,如果他需要在行的開始/結尾保留空格和製表符,那麼rstrip會更合適。 – CrazyCasta

1

試試這個:

output_dict = {} 
with open(r"filename.txt") as f: 
    for line in f: 
     line = line.strip() # remove newlines and such (the '/r/n' bit) 
     subject, value, workload = line.split(',', 3) 
     output_dict[subject] = (int(value), int(workload)) 

所以,我做了一些改動。我使用line.strip()從字符串中刪除任何換行符(和周圍的空格)。爲了提高效率,我還將兩個環路組合在一起。

要在一個元組的每個項目轉換爲int,你可以做這樣的事情:

my_tuple = tuple(int(i) for i in my_tuple) 

...這基本上是一個修真發電機轉換成一個元組,但因爲你只有兩個要轉換的項目,只需輸入int(value)int(workload)就更有意義了,特別是因爲您不再需要輸入像int(lineList[i][1])這樣笨重的東西。

1

這裏是我的建議,使用列表理解:

with open(r"test.txt") as f: 
    reBuff = [x.split(",") for x in f.readlines()] 
    outDict = dict([(subject.strip(), (int(value.strip()), int(workload.strip()))) for subject,value,workload in reBuff]) 

一旦你在格式[(key, value),(key, value)]列表或元組,你可以很容易地將其轉換爲一個字典。