Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python fileinput-索引行顺序错误_Python - Fatal编程技术网

Python 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]) 请帮我找到一种写行的方法,它的数字

我有一个巨大的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])
我得到的结果(我希望得到一个大文件,如下所示):

使用

如果您处理的是单个文件,则可能根本不需要
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同时写入文件行号?我不确定您的意思。您是想在文件或其他内容的中间插入行吗?我在页面顶部添加了更好的解释,说明了我想在问题中得到什么。啊,那么您想在输出中包含文件行号吗?以一种高效的方式进行编辑。