如何在 Python 中读取从第 7 行到第 265 行的行

  • 本文关键字:Python 读取 python python-2.7
  • 更新时间 :
  • 英文 :


我正在读取一个.txt文件,但我想从第 6 行读取文件到第 265 行。 有人可以告诉我该怎么做吗?输出.txt :

my code:
    h = httplib.HTTPSConnection(host, port)
h.set_debuglevel(1)
headers = {
    "Content-Type": "multipart/form-data; boundary=%s" % (boundary,),
    "Connection": "Keep-Alive",
}
h.request('POST', uri, body, headers)
res = h.getresponse()
filehandle = open("Output.txt", "wb")
filehandle.write(res.read())
import itertools
with open("Output.txt", "rb") as infile, open("output1.txt", "wb") as outfile:
    for line in itertools.islice(infile, 6, 265):
        outfile.write(line)
filehandle.close()

上面的代码只是读取第 6 行,但如何从第 6 行读取到 265 行?

我建议使用itertools包中的islice

import itertools
 with open("input.txt", "rb") as infile, open("output.txt", "wb") as outfile:
     for line in itertools.islice(infile, 6, 265):
         outfile.write(line)

为了回应您的评论,要求将前 6 个和后 12 个读取到一个文件中,其余部分读取到另一个文件中,我会做如下操作

from collections import deque
from itertools import islice 
with open("input.txt", "rb") as infile, open("output1.txt", "wb") as outfile1, open("output2.txt", "rb") as outfile2:
    outfile.write(''.join(islice(infile, 6)))
    q = deque(islice(infile, 12))
    outfile2.write(''.join(q))
    for line in infile:
        q.append(line)
        outfile2.write(q.popleft())
    outfile.write(''.join(q))

这里的想法是

  1. 将前 6 行写入第一个文件
  2. 将接下来的 12 行写入第二个文件,并用它们填充队列
  3. 将新行推送到队列中并弹出旧行,直到输入文件耗尽
  4. 将队列中剩余的 12 行(最后 12 行)写入第一个输出文件。

下面是一个例子。它打印第 6 行直到第 265 行。

with open("file", "rb") as fp:
    for linenr, line in enumerate(fp):
        if linenr > 264:
            break
        elif linenr >= 5:
            print(line)

请注意,第6行linenr == 5,第265行264


您可以使用以下示例将所选行保存到另一个文件。

with open("fileoutput", "wb") as outputfile, open("fileinput", "rb") as inputfile:
    for linenr, line in enumerate(inputfile):
        if linenr > 264:
            break
        elif linenr >= 5:
            outputfile.write(line)

正如您在一条评论中提到的那样,您想阅读文件的前 4 行和最后 12 行,您可以使用 @DavisYoshida 的答案来阅读第一部分和最后一部分的答案

from collections import deque
def tail(iterable,n=None):
    """Return an iterator over the last n items, if n is none return a iterator over all elemens
       in iterable save the first
       tail('ABCDEFG',3) --> E F G
       tail('ABCDEFG')   --> B C D E F G """
    if n is None:
        resul = iter(iterable)
        next(resul,None)
        return resul
    return iter(deque(iterable, maxlen=n))

这是来自 Itertools 文档的配方,稍作更改

例如

>>> with open("Output.txt","rb") as infile:
        for i,line in enumerate(islice(infile,0,4),1):
            print(i,"-->",line)
        print()
        for i,line in enumerate(tail(infile,12)):
            print(-(12-i),"-->",line)
1 --> b'----Nuance_NMSP_vutc5w1XobDdefsYG3wqn'
2 --> b'Content-Disposition: form-data; name="Audio"; paramName="TEXT_TO_READ"n'
3 --> b'Content-Type: audio/x-wav;codec=pcm;bit=16;rate=8000n'
4 --> b'Nuance-Context: f886d51f-84f7-491e-9412-1d1f4e33304en'
-12 --> b'Content-Disposition: form-data; name="Audio"; paramName="TEXT_TO_READ"n'
-11 --> b'Content-Type: audio/x-wav;codec=pcm;bit=16;rate=8000n'
-10 --> b'Nuance-Context: f886d51f-84f7-491e-9412-1d1f4e33304en'
-9 --> b'n'
-8 --> b'n'
-7 --> b'----Nuance_NMSP_vutc5w1XobDdefsYG3wqn'
-6 --> b'Content-Disposition: form-data; name="QueryResult"n'
-5 --> b'Content-Type: application/JSON; charset=utf-8n'
-4 --> b'Nuance-Context: f886d51f-84f7-491e-9412-1d1f4e33304en'
-3 --> b'n'
-2 --> b'{"TTSStatus":"Success","result_type":"NVC_TTS_CMD","NMAS_PRFX_SESSION_ID":"28fdbb23-a278-4e7d-8275-a046071823b3","NMAS_PRFX_TRANSACTION_ID":"1"}n'
-1 --> b'----Nuance_NMSP_vutc5w1XobDdefsYG3wq--'
>>>         

最新更新