2012-11-28 64 views
0
results = open(filename, 'r') 


    line = results.readline() 
    while line != '': 
    # results for a single draw 
    star = line[line.rfind('\t') :] 
    stars.append(star) 
    line =results.readline() 
''' 

while line != '': 


    main = [line[:line.rfind('\t')]] 
    mains.append(main) 
    line =results.readline() 
return (mains) 

我正在使用上述腳本以格式1,2,3,4,5選項卡9,10中的文本文件讀取新行6,7,8, 9,10選項卡11,12,並試圖回到[[1,2,3,4,5],[6,7,8,9,10]]上面的腳本給了我[['1,2, 3,4,5'],['6,7,8,9,10']] - 括號阻止我使用數據。請原諒我再次變得愚蠢,但是如何從文本文件恢復列表格式?我也試着去閱讀其他職位,但一直沒能申請的建議 - 太新,這個 非常感謝所有幫助返回文本文件中的列表清單

回答

0

嘗試:

# say your data is in file named 'testfile' 
$ cat testfile 
1,2,3,4,5 9,10 
6,7,8,9,10 11,12 

# the actual code 
datafile = [line.strip().split('\t')[0].split(',') for line in open('testfile')] 
result = [] 
for l in datafile: 
    result.append([int(string) for string in l]) 
# test the results 
print(result) 
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] 

編輯: 獲取每個行的兩個部分,嘗試:

datafile = [line.strip() for line in open('testfile')] 
datafile = [line.split('\t') for line in datafile if line] 
datalist = list(zip(*datafile)) 
result = [] 
for index in datalist: 
    for i in index: 
     result.append([int(string) for string in i.split(',')]) 
# you can access the result list by indexing: 
print(result[:2], result[2:]) 
# or assign to new lists: 
firstlist, secondlist = result[:2], result[2:] 
print(firstlist, secondlist) 
+0

這很有用。非常感謝你。不過,我想明白爲什麼它有效。爲什麼這會從返回的數字中「移除」'''? – user1478335

+0

@ user1478335「1」是一個字符串對象,它支持與「1」(一個整數對象)完全不同的一組操作。例如。 '1'+'2'產生'12'(將字符串連接在一起),'1 + 2'讓你'3'(它執行簡單的求和操作)。如果您需要整數對象,則需要使用int('1')'將字符串轉換爲整數。因此,代碼首先分割行,以便在製表符後移除部分,然後使用'',''作爲分隔符分割返回的字符串,然後在列表中有1個字符長的字符串,並且代碼將它們轉換通過使用'int(string)'將其轉換爲整數。 –

+0

謝謝你。還有一個愚蠢的問題。如果我想返回第二組(包含兩個數字),我該如何更改數據文件聲明?我似乎無法正確定義自己的位置。正在使用[line.rfind('\ t')+ 1:line.rfind('\ n')]。split() – user1478335

3

試試這個:

results = open(filename, 'r') 
line = results.readline() 
mains = [] 
while line != '': 
    stars = line[:line.rfind('\t')].split(',') 
    nums = [int(n) for n in stars] 
    mains.append(nums) 
    line =results.readline() 
+0

給我:nums = [int(n)for n in stars] ValueError:無效文字爲int()以10爲底:與往常一樣,我似乎做了錯誤的事! – user1478335

+0

你確定你的輸入文件包含TAB字符嗎?按TAB鍵時,某些編輯器會放置空格而不是TAB。使用記事本創建您的輸入文件。如果這沒有幫助,那麼用下面的代碼替換這一行:nums = [int(n)for n in stars if if] –

相關問題