2016-07-24 24 views
1

我在那個線與新線分離的方式格式化的文件,像下面如何從文件中讀取從任意換行開始線在Python

1 1 1 1 
2 2 2 2 2 2 2 
3 3 3 3 3 3 

我想單獨看線例如從第二個開始,並將它們保存在一個數組中。我想我可以管理最後一部分,但我無法弄清楚如何從文件的第n個換行開始讀取。 任何想法,我該怎麼做? 謝謝。 此致敬禮。

+0

顯示你知道的代碼。如果你正在使用readline,你可以計算到你想要保存的點 –

回答

1

嗯,你可以做這樣的事情:

n1, n2 = 0, 2 

with open('filename.txt') as f: 
    print '\n'.join(f.read().split('\n')[n1:n2+1]) 

這將產生(按照內容的文件在您發佈)輸出像這樣:

1 1 1 1 
2 2 2 2 2 2 2 
3 3 3 3 3 3 

EDIT 1

@mi c-tiz根據你在下面發表的評論,我知道你希望將文本文件中的所有數字都放到一個數組中。

with open('filename.txt') as f: 
    array = [i for i in f.read() if not i == ' '] 

你提到這個代碼,會產生一個列表array

array = ['1', '1', '1', '1', '\n', '2', '2', '2', '2', '2', '2', '2', '\n', '3', '3', '3', '3', '3', '3'] 

然後,您可以通過拆分它\n字符的打印出現的元素。

編輯2: 您可以使用下面

d = {} 
with open('filename.txt') as f: 
    array = f.read().split('\n') 

for i in range(len(array)): 
    d['l%r'%i] = [int(j) for j in array[i] if not j == ' '] 

代碼在字典中保存這些數字這將產生d = {'l2': [3, 3, 3, 3, 3, 3], 'l0': [1, 1, 1, 1], 'l1': [2, 2, 2, 2, 2, 2, 2]}

+0

這種方法可以打印我不會的行,但現在我不知道如何把數組中不同位置的線的每個數字,如[1,1,1,1]。 –

+0

好吧,我想我打開了這樣的最後一部分I = [] with open('I_t.dat')as f: i ='\ n'.join(f.read()。split('\ N')[N1:N2]) 的j我: 如果j == '\ t': 繼續 其他: I.append(浮點(J)) –

+0

只是一個問題。現在我有一個格式爲1 \ t1 \ t1 \ t的文件,如果我嘗試用前面提到的方法刪除\ t,並以0到9的數字組成的數組結束,但是我的文件也包含更大的數字,而我不要解決問題。 –

2

由於文件是可迭代的Python中,你可以調用它的next跳過第一行,例如:

with open('data.txt', 'r') as data: 
    next(data) 
    for line in data: 
     print line.split() 

會產生:

['2', '2', '2', '2', '2', '2', '2'] 
['3', '3', '3', '3', '3', '3'] 

參考文獻:

+0

你應該添加到你的示例代碼如何從第n行開始,而不是跳過一行。可以更好地回答原始問題。 – wrkyle

+0

@wrkyle我寧願把它留給OP,一般來說跳過n行不應該是一個太大的飛躍:) –

1
lines = open('test.txt', 'r').readlines() 

# n is your desired line 
for lineno in range(n-1, len(lines)): 
    print list(lines[lineno].strip()) 
0

不能直接跳轉到指定的行。你必須閱讀前n行:

n = 1 
with open('data.txt', 'r') as data: 
    for idx, _ in enumerate(data): 
     if idx == n: 
      break 
    for line in data: 
     print line.split() 
2

您可以使用itertool.islice對於這一點,如:

from itertools import islice 

with open('filename') as fin: 
    wanted = islice(fin, 1, None) # change 1 to lines to skip 
    data = [line.split() for line in wanted]