2013-05-14 95 views
1

我想選擇文件中的每第12行並將這些行寫入新文件。任何人都有建議?我有126行,前6行是標題,所以我需要選擇第7,第19和第31行,直到文件結束。並且每選擇10行應該進入一個新文件。如何將每第12行寫入一個新文件

編寫代碼的方式我可以編寫一個文件,比如P_1,它由10(每第12行)7,19,31 ...,109組成,儘管我想要創建12個文件。所以第一個文件是P_1,從第7行開始,P_2從第8行開始。我如何循環以獲得7到8等等,最終到達第18行?

我將包括我在範圍內寫入新的12個文件(將工作?)。

我爲範圍(1,12): 與開放('輸出%i.txt'%i,'w +')爲g:我只是不知道如何讓行改變,所以他們符合正確的文件。雅知道我的意思嗎?

再次感謝!

+0

使用模運算符''%。特別是:'(line-6)%12 == 1' – Elazar 2013-05-14 01:43:31

回答

3
with open("input") as f: 
    for i, line in enumerate(f): 
     if (i-7) % 12 == 0: print line.rstrip("\n") 
6

如果你有一個大文件,這種方法是好的,因爲它不會將整個文件加載到內存中。 (如for line in f.readlines()會)

from itertools import islice #used to get the 7th, 19th, etc... lines 
import fileinput #to iterate over lines without loading whole file into memoru 

with open('output.txt','w+') as g: 
    for line in islice(fileinput.input('file.txt'),6,None,12): #start at 6 because iterable 0-indexed, that is the 7th element has index 6 
     g.write(line) 

OR(方法所指出的@Elazar)

with open('output.txt', 'w') as g, open('file.txt') as f: 
    for line in islice(f,6,None,12): 
     g.write(line) 
+0

我們可以直接在這裏使用'open'('file.txt')作爲f'並將'f'傳遞給'islice'嗎?整個文件不會一次加載到內存中,對嗎?畢竟我們使用'f'作爲'迭代器'。如果我錯了,請糾正我。 – satoru 2013-05-14 02:04:51

+0

@ Satoru.Logic這是真的:http://docs.python.org/2/library/stdtypes.html#file.next,使用fileinput的主要原因是所以我們不需要有另一個'與開放( ...'加載file.txt。 – HennyH 2013-05-14 02:11:02

+1

對於Python 2.7或更高版本,您可以使用單個'with'來打開這兩個文件。請參閱@ Elazar的答案 – 2013-05-14 02:32:05

1
with open('newfile.txt', 'w') as outfile, open('input.txt') as infile: 
    newfile.writelines(k for i, k in enumerate(infile) if i%12==7) 
+0

快速反應!謝謝你們,明天當我在python面前的時候我會測試一下,我會給你一些更新,不知道Elazar的意思是「真實的世界「,它是一個我需要反覆使用的腳本,它不適用於學校或其他東西 – user2379814 2013-05-14 03:24:44

+0

@ user2379814如果是這樣,它*是一個」真實世界「腳本,我使用了」open ()'在這個答案的第一個版本中''外部'.'現在這個答案是可以的,但是@HennyH gav更好的一個。 – Elazar 2013-05-14 03:30:59

0
# creating the file as a base for me, you don't need this part 
with open('dan.txt','w') as f: 
    f.write('\n'.join(str(i) for i in xrange(1,127))) 



# your desired code 
with open('dan.txt') as g: 
    li = g.readlines() 

for i in xrange(6,19): 
    with open('P_%d.txt' % (i-5),'w') as f: 
     f.writelines(li[x] for x in xrange(i,126,12)) 
+0

謝謝你,完美的工作! – user2379814 2013-05-15 14:55:49

相關問題