Python 如何将每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:我只是不知道如何更改行,使它们与正确的文件相对应。你知道我的意思吗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)内
再次感谢 如果您有一个大文件,这种方法很好,因为它不会将整个文件加载到内存中。(与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()
outsidewith
在这个答案的第一个版本中。现在这个答案还可以,但是@HennyH给出了一个更好的答案。快速响应!谢谢大家,我明天在python面前会测试这个。我会给你们一些更新。不确定Elazar所说的“真实世界”是什么意思“。这是一个我需要反复使用的脚本,它不是用于学校或其他地方。@user2379814如果是的话,它是一个“真实世界”脚本。我在这个答案的第一个版本中使用了一个open()
outsidewith
。现在这个答案还可以,但是@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))