2014-09-12 424 views
1

我有一行txt文件file1.txt,它具有一系列10個數字,嘗試將帶有數字的txt文件讀入列表中,然後使用Python進行排序

10,45,69,85,21,32,11,71,20,30 

我想從txt文件把這些數字,然後將它們添加到列表,然後按升序排列的數字進行排序。

我已經試過

myfile1 = open('file1.txt', 'r').readlines() 

但這似乎給我1長的名單,這顯然不能進行排序。

In [101]: myfile1 
Out[101]: ['10,45,69,85,21,32,11,71,20,30'] 

我猜測我的閱讀文本文件有些問題,但是我似乎找不到合適的方法。

回答

1

.readlines()做什麼它說:它讀取由線行的文件。在你的榜樣,只有一條線,所以長度爲1

有了這一條線,你需要拆分的逗號:

with open(file1.txt,'r') as myfile: 
    for line in myfile: 
     print sorted(map(int, line.split(','))) 

或者,如果您有多條線路與許多數字:

data = [] 
with open(file1.txt,'r') as myfile: 
    for line in myfile: 
     data.extend(map(int, line.split(','))) 
print sorted(data) 

在這裏,我與with關鍵字用來打開該文件,可以通過行遍歷線。然後,使用每行上的字符串的split方法,該方法返回字符串列表。然後,我使用map將這些字符串轉換爲整數,方法是將int類型的轉換函數應用於列表中的每個項目。這個列表可以被排序。請務必查看Python文檔中的string methods page

沒有輸入文件的測試:

numbers = "10,45,69,85,21,7,32,11,71,20,30" 
data = [] 
data.extend(map(int, numbers.split(','))) 
print sorted(data) 

打印

[7, 10, 11, 20, 21, 30, 32, 45, 69, 71, 85] 
+1

請注意,您還必須這些'string'別的'10'將整理之前'轉換爲'int'或7'例如。 – CoryKramer 2014-09-12 16:25:16

+0

爲什麼不只是'data =(map(int,numbers.split(',')))? – 2014-09-12 16:32:24

+0

@PadraicCunningham - 你的意思是在測試?我留在「數據」列表中,因爲它與多行數字的後一個例子有關。當然,你的建議也適用於這個最小的測試。 – dantiston 2014-09-12 16:34:36

2

有點混淆做的1套,但基本上是:

with open('file1.txt', 'r') as f: 
    data = sorted(map(int, f.readline().split(','))) 

這個作用:

  1. 讀1線:f.readline()
  2. 分割上','字符線: .split(',')
  3. liststring映射到int值:map(int, list)
  4. 排序listint的:sorted(list)
相關問題