我正在读取一个.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))
这里的想法是
- 将前 6 行写入第一个文件
- 将接下来的 12 行写入第二个文件,并用它们填充队列
- 将新行推送到队列中并弹出旧行,直到输入文件耗尽
- 将队列中剩余的 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--'
>>>