2013-05-14 55 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

相关问题