我有一个巨大的txt文件。我不能使用readlines()来读取它,因为出现了内存错误,所以我开始使用fileinput。 它运行良好,直到我需要将其中的一些行写入另一个文件,然后我“无序访问行”。 这是我脚本的一部分:
input_4=fileinput.input([plik0_a])
out=open('out_file','w')
for i in range(s,e):
out.writelines('%s' % input[i])
请帮我找一个写行的方法,这个数字是== i。 我认为这并不难,但我只是一个初学者:)。
我需要一些可以像这样工作的东西(下面的脚本的一部分)和大文件。
n=10918
s=(int(start)-n)
e=(int(end)-n+1)
czyta_4=open(plik0_a,'r')
zczyta_4=czyta_4.readlines()
for i in range(s,e):
out.writelines('%s' % i +': '+ '%s' % zczyta_4[i])
我得到的结果(我希望得到一个巨大的文件,如下所示):
0: fixedStep chrom=chr1 start=10918 step=1
1: 0.064
2: 0.058
3: 0.064
4: 0.058
5: 0.064
6: 0.064
7: 0.064
8: 0.064
9: 0.064
10: 0.058
.
.
.
s : 0.058
答案 0 :(得分:2)
您不需要使用fileinput,文件对象是可迭代的
import itertools
with open(plik0_a) as input_4, open('out_file','w') as out:
out.writelines(itertools.islice(input_4, s, e))
请注意,该文件将指向行e
之后,因此如果您想要更多行,则必须减去该行。
例如
import itertools
with open(plik0_a) as input_4, open('out_file','w') as out:
out.writelines(itertools.islice(input_4, 10, 20)) # lines 11-20
out.writelines(itertools.islice(input_4, 10, 20)) # lines 31-40
答案 1 :(得分:1)
import itertools
input_4=fileinput.input([plik0_a])
out=open('out_file','w')
out.writelines(itertools.islice(input_4, s, e))
如果您正在处理单个文件,则可能根本不需要fileinput
- 可以直接迭代文件而无需将整个内容加载到内存中。虽然在命令行上指定文件仍然非常方便。为了示范:
import itertools
with open('in_file','r') as input_4:
with open('out_file', 'w') as out:
out.writelines(itertools.islice(input_4, s, e))
要在输出中包含原始行号,请使用enumerate
。这将产生行号和行本身的元组。它看起来像这样:
import itertools
input_4=fileinput.input([plik0_a])
out=open('out_file','w')
for (line_number, line) in itertools.islice(enumerate(input_4), s, e):
out.write('%s: %s' % (line_number, line))
或者,使用生成器表达式:
import itertools
input_4=fileinput.input([plik0_a])
out=open('out_file','w')
out.writelines(('%s: %s' % (line_number, line) for (line_number, line) in itertools.islice(enumerate(input_4), s, e)))
enumerate
返回一个迭代器,所以你也可以islice
。默认情况下,它从0开始,您的示例显示的可能是您想要的,但在2.6及更高版本中它接受一个可选的start
参数,因此如果您愿意,可以从1开始。
答案 2 :(得分:0)
infile = open('infile.txt', 'r')
outfile=open('outfile.txt', 'w')
line=[]
for a in infile:
line.append(a)
outfile.write(line[number of line to be printed])
## example: If you want to print first line
## outfile.write(line[0])
## outfile.write(line[1]) ## for second line
## if you have a list of lines to be printed
infile = open('infile.txt', 'r')
outfile=open('outfile.txt', 'w')
line=[]
for a in infile:
line.append(a)
line_list =[] ## list of line numbers
for b in line_list:
outfile.write(line[b])