Python fileinput-索引行顺序错误
我有一个巨大的txt文件。我无法使用readlines()读取它,因为出现了内存错误,所以我已经开始使用fileinput。 它工作得很好,直到我需要将它的一些行写入另一个文件,然后我得到了“无序访问行”。 这是我脚本的一部分:Python fileinput-索引行顺序错误,python,Python,我有一个巨大的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]) 请帮我找到一种写行的方法,它的数字
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])
我得到的结果(我希望得到一个大文件,如下所示):
使用
如果您处理的是单个文件,则可能根本不需要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))
要将原始行号包括在输出中,请使用枚举
。这将产生行号和行本身的元组。它看起来像这样:
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开始。使用
如果您处理的是单个文件,则可能根本不需要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))
要将原始行号包括在输出中,请使用枚举
。这将产生行号和行本身的元组。它看起来像这样:
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开始。您不需要使用fileinput,file对象是可编辑的
import itertools
with open(plik0_a) as input_4, open('out_file','w') as out:
out.writelines(itertools.islice(input_4, s, e))
请注意,该文件将指向第e
行之后,因此,如果要再保留一些行,则必须减去该行
乙二醇
您不需要使用fileinput,file对象是可编辑的
import itertools
with open(plik0_a) as input_4, open('out_file','w') as out:
out.writelines(itertools.islice(input_4, s, e))
请注意,该文件将指向第e
行之后,因此,如果要再保留一些行,则必须减去该行
乙二醇
你想在这里实现什么?你想在这里实现什么?我猜你想打印文件中的特定行。当我刚刚删除readlines时,我得到了:TypeError:“file”对象没有属性“getitem”,请尝试更改以下步骤:zczyta_4=czyta_4.readlines()To:对于czyta_4中的zczyta_4:我猜您想打印文件中的特定行。当我刚刚删除readlines时,我得到了:TypeError:'file'对象没有属性'getitem',请尝试更改以下步骤:zczyta_4=czyta_4.readlines()To:对于czyta_4中的zczyta_4:是否可以使用itertools和islice将行号写入文件?我不确定您的意思。你是想在文件的中间插入行还是什么?我在那一页的顶部添加了更好的解释,我想在一个问题中得到什么。啊,因此,您希望在输出中包含文件行号?以有效的方式进行编辑。是否可以使用itertools和islice同时写入文件行号?我不确定您的意思。您是想在文件或其他内容的中间插入行吗?我在页面顶部添加了更好的解释,说明了我想在问题中得到什么。啊,那么您想在输出中包含文件行号吗?以一种高效的方式进行编辑。