使用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,如何从第七行开始读取文件?的主要内容,如果未能解决你的问题,请参考以下文章

python脚本 从第二行开始读取 文件读取 跳过第一行 跳过前几行

python 从第二行开始读文件

java文件读取怎么实现从第几行开始读取?

如何让SAS从第二行数据读取

Python从第二行到第十五行读取文本文件[关闭]

java 读取txt文件 想自定义从第几个字节开始读和读几个字节 怎么做??