2013-10-09 47 views
0

我的文件的Python閱讀文件錯誤:與陣列

Offices 10 
MedicalOffice 15 
PostOffice 30 
Mall 200 

如何讓我的蟒蛇只讀第二列。 像得到:

10 
15 
30 
200 

我已經試過可能的方法來使它只讀,10,15,30,等等。相反的名稱。我試過這個沒有名字,它工作正常。但我需要在文本文件中包含名稱。任何幫助?謝謝

def something(file1): 
    with file1 as f: 
     nums = [int(line) for line in f] 
     print("Read from File: ", nums) 


textFileName = input("Enter the filename: ") 
file1 = open(textFileName) 
something(file1) 

謝謝。

+0

這是第二個_column_。第二個_row_是'MedicalOffice 15'。 – abarnert

+0

@abarnert好抓住那裏。我的錯字。感謝您的支持! – Singh2013

+0

是的,我認爲這只是一個錯字,但更好的解決它,而不是混淆未來的讀者... – abarnert

回答

2

您不僅可以閱讀第二欄。

但你可以閱讀兩列,忽略了第一列,只有使用第二。

例如:

def something(file1): 
    with file1 as f: 
     lines = (line.partition(' ') for line in f) 
     nums = [int(line[-1]) for line in lines) 
     print("Read from File: ", nums) 

我做了這兩個步驟,只是爲了更容易地看到,新功能對你已經有了部分(int)的部分(partition)。您可以一起塞進這一切到一個單一的listcomp如果你喜歡:

 nums = [int(line.partition(' ')[-1]) for line in f] 

反正partition分割每行的第一空間,所以你得到的,例如,('Offices', ' ', '10')[-1]需要最後一部分,'10'。然後是你已經知道的int

+0

謝謝!有用! – Singh2013

3

讀取第二列,分割線,然後在第二場:

[x.split()[1] for x in open(textFileName,"r")] 

如果你想要的數字,只需要調用INT:

[int(x.split()[1]) for x in open(textFileName,"r")] 
+0

爲什麼在這裏添加'.readlines()'?這不是原來的問題,它所做的只是讓程序使用更多的內存和更多的CPU(以及更多的輸入)而沒有任何好處。 – abarnert

+0

@abarnert你是對的 - 更新答案 – SheetJS

1

類似@ Nirk的答案,但有改進的文件處理:

with open('/path/to/file.txt', 'r') as f: 
    nums = [x.strip().split()[-1] for x in f]