使用python,如何从第七行开始读取文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python,如何从第七行开始读取文件?相关的知识,希望对你有一定的参考价值。
我有一个文本文件结构:
date
downland
user
date data1 date2
201102 foo bar 200 50
201101 foo bar 300 35
因此不需要前六行文件。文件名:dnw.txt
f = open('dwn.txt', 'rb')
如何从第7行开始将此文件“拆分”为EOF?
with open('dwn.txt') as f:
for i in xrange(6):
f.next()
for line in f:
process(line)
在我看来,带有readlines()的解决方案并不令人满意,因为readlines()会读取整个文件。用户必须再次读取行(在文件中或在生成的列表中)来处理他想要的内容,而它本来可以在没有第一次读取有趣行的情况下完成。此外,如果文件很大,则内存由文件内容加权,而for line in file
指令则更轻。
重复readline()可以这样做
nb = 6
exec( nb * 'f.readline()
')
它是一小段代码,nb是可编程调整的
Itertools回答!
from itertools import islice
with open('foo') as f:
for line in islice(f, 6, None):
print line
with open('test.txt', 'r') as fo:
for i in xrange(6):
fo.next()
for line in fo:
print "%s" % line.strip()
事实上,要正确回答问题,因为它是写的
How do I "split" this file starting at line 7 to EOF?
你可以做
:
如果文件不大:
with open('dwn.txt','rb+') as f:
for i in xrange(6):
print f.readline()
content = f.read()
f.seek(0,0)
f.write(content)
f.truncate()
如果文件很大
with open('dwn.txt','rb+') as ahead, open('dwn.txt','rb+') as back:
for i in xrange(6):
print ahead.readline()
x = 100000
chunk = ahead.read(x)
while chunk:
print repr(chunk)
back.write(chunk)
chunk = ahead.read(x)
back.truncate()
truncate()函数对于放置您要求的EOF至关重要。在不执行truncate()的情况下,文件的尾部(对应于6行的偏移量)将保留。
.
必须以二进制模式打开该文件以防止出现任何问题。
当Python读取' r n'时,它会在' n'(即默认启用的通用换行支持)中对它们进行转换,也就是说,即使存在'链中的块,也只有' n' r n'在文件中。
如果文件来自Macintosh原点,它在处理之前只包含CR =' r'换行符,但在非重写期间它们将被更改为' n'或' r n'(根据平台) - 麦金托什机器。
如果它是来自Linux源的文件,它只包含LF =' n'换行符,在Windows操作系统上,它们将更改为' r n'(我不知道在Macintosh上处理的Linux文件)。原因是操作系统Windows写入' r n'无论订购什么,' n'或' r'或' r n'。因此,重写的字符数将比读取的数量多,然后前后文件指针之间的偏移量将减小并导致混乱的重写。
在HTML源代码中,还有各种换行符。
这就是为什么在处理它们时以二进制模式打开文件总是更好的原因。
Python 3:
with open("file.txt","r") as f:
for i in range(6):
f.readline()
for line in f:
# process lines 7-end
Alternative version
如果你知道分离的字符位置read()
(感兴趣的部分的标题部分)换行符,你可以直接使用命令pos
,例如一个
,在您想要打破输入文本的文本中:
with open('input.txt', 'r') as txt_in:
txt_in.seek(pos)
second_half = txt_in.read()
如果您对这两个半部分感兴趣,您还可以调查以下方法:
with open('input.txt', 'r') as txt_in:
all_contents = txt_in.read()
first_half = all_contents[:pos]
second_half = all_contents[pos:]
您可以将整个文件读入数组/列表,然后从适合您希望开始读取的行的索引处开始。
f = open('dwn.txt', 'rb')
fileAsList = f.readlines()
fileAsList[0] #first line
fileAsList[1] #second line
#!/usr/bin/python
with open('dnw.txt', 'r') as f:
lines_7_through_end = f.readlines()[6:]
print "Lines 7+:"
i = 7;
for line in lines_7_through_end:
print " Line %s: %s" % (i, line)
i+=1
打印:
第7行:
Line 7: 201102 foo bar 200 50 Line 8: 201101 foo bar 300 35
编辑:
要在没有前六行的情况下重建dwn.txt
,请在上面的代码之后执行此操作:
with open('dnw.txt', 'w') as f:
for line in lines_7_through_end:
f.write(line)
只做f.readline()六次。忽略返回的值。
以上是关于使用python,如何从第七行开始读取文件?的主要内容,如果未能解决你的问题,请参考以下文章