Python 如何将每12行写入一个新文件

Python 如何将每12行写入一个新文件,python,file,Python,File,我想选择文件中的每12行,并将这些行写入新文件。有人有什么建议吗?我有126行,前6行是标题,所以我需要选择第7行、第19行和第31行,依此类推,直到文件结束。每选择10行,就会进入一个新文件 按照代码的编写方式,我可以编写一个文件,比如说p_1,它由10行(每12行)组成7,19,31…,109,但我想生成12个文件。第一个文件是P_1,从第7行开始,P_2从第8行开始。我如何循环从7点到8点,依此类推,最终到达18号线 我将包括我在范围内写新的12个文件(会工作吗?) 对于范围(1,12)内

我想选择文件中的每12行,并将这些行写入新文件。有人有什么建议吗?我有126行,前6行是标题,所以我需要选择第7行、第19行和第31行,依此类推,直到文件结束。每选择10行,就会进入一个新文件

按照代码的编写方式,我可以编写一个文件,比如说p_1,它由10行(每12行)组成7,19,31…,109,但我想生成12个文件。第一个文件是P_1,从第7行开始,P_2从第8行开始。我如何循环从7点到8点,依此类推,最终到达18号线

我将包括我在范围内写新的12个文件(会工作吗?)

对于范围(1,12)内的i: 使用open('output%i.txt'%i,'w+')作为g:我只是不知道如何更改行,使它们与正确的文件相对应。你知道我的意思吗


再次感谢

如果您有一个大文件,这种方法很好,因为它不会将整个文件加载到内存中。(与f.readlines()中的第行相同。

with open("input") as f:
    for i, line in enumerate(f):
        if (i-7) % 12 == 0: print line.rstrip("\n")
(由@Elazar指出的方法)


如果您有一个大文件,这种方法很好,因为它不会将整个文件加载到内存中。(与f.readlines()中的第行相同。

(由@Elazar指出的方法)


使用模运算符
%
。具体来说:
(第6行)%12==1
使用模运算符
%
。具体地说:
(第6行)%12==1
我们可以直接在这里使用带有open('file.txt')的
作为f
并将
f
传递给
islice
吗?整个文件不会一次加载到内存中,对吗?毕竟,我们使用
f
作为
迭代器
。如果我错了,请纠正我。@Satoru.Logic这是真的:,使用fileinput的主要原因是我们不需要另一个
打开(…
来加载file.txt。对于Python 2.7+,您可以使用一个
打开两个文件。请参阅@Elazar的answer@gnibbler我从来不知道这一点(我在答案中添加了该选项)我们可以只使用open('file.txt')的
作为f
并将
f
直接传递到
islice
?整个文件不会立即加载到内存中,对吗?毕竟我们使用
f
作为
迭代器
。如果我错了,请纠正我。@Satoru.Logic这是真的:,使用fileinput的主要原因是这样我们就不需要另一个
打开(…
要加载file.txt.For Python 2.7+,您可以使用一个
来打开两个文件。请参阅@Elazar的answer@gnibbler我从来都不知道这个(我已经在我的答案中添加了这个选项)快速响应!谢谢各位,我明天在python面前会测试这个。我会给你们一些更新。我不确定Elazar的意思“真实世界”。这是一个我需要反复使用的脚本,它不是用于学校或其他地方。@user2379814如果是,它是一个“真实世界”脚本。我使用了一个
open()
outside
with
在这个答案的第一个版本中。现在这个答案还可以,但是@HennyH给出了一个更好的答案。快速响应!谢谢大家,我明天在python面前会测试这个。我会给你们一些更新。不确定Elazar所说的“真实世界”是什么意思“。这是一个我需要反复使用的脚本,它不是用于学校或其他地方。@user2379814如果是的话,它是一个“真实世界”脚本。我在这个答案的第一个版本中使用了一个
open()
outside
with
。现在这个答案还可以,但是@HennyH给出了一个更好的答案。
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)
with open('output.txt', 'w') as g, open('file.txt') as f:
    for line in islice(f,6,None,12):
        g.write(line)
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)
# 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))