python取文件最后几行,python提取前几行数据

发布时间:2022-11-22

本文目录一览:

  1. python 怎么读取文件每行的开头和末尾?
  2. 如何用python最快的获取大文件的最后几行
  3. python 怎样或读取一个文件的最后一行
  4. 如何用python获取文件的最后一行,文件可能会比较大
  5. 如何利用python读取特定目录下的特定文件的倒数两行

python 怎么读取文件每行的开头和末尾?

text = """
16 wyp1 23 131212121212
17 wyp2 24 134535353535
18 wyp3 25 132453535353
19 wyp4 26 154243434355
20 wyp 25 13188888888888
21 test 30 13888888888888
22 zs 34 899314121
"""
text_arr = text.split("\n") # 根据换行符拆分字符串
# print(text_arr)
# content_dict = {} # 字典,用来装结果
for i in text_arr:
    if i == "": # 如果这个内容是空的,则略过,继续下一个
        continue
    i_arr = i.split(" ") # 根据空格拆分字符串
    content_dict[i_arr[0]] = i_arr[-1] # 将字符串列表的第一个位置作为键,最后一个位置的内容作为值
print(content_dict)

两次print的结果

ps:图片好像不是高清的.......

如何用python最快的获取大文件的最后几行

#!/usr/bin/env python
import os
import sys
def get_last_n_lines(logfile, n):
    blk_size_max = 4096
    n_lines = []
    with open(logfile, 'rb') as fp:
        fp.seek(0, os.SEEK_END)
        cur_pos = fp.tell()
        while cur_pos > 0 and len(n_lines) < n:
            blk_size = min(blk_size_max, cur_pos)
            fp.seek(cur_pos - blk_size, os.SEEK_SET)
            blk_data = fp.read(blk_size)
            assert len(blk_data) == blk_size
            lines = blk_data.split('\n')
            # adjust cur_pos
            if len(lines) > 1 and len(lines[0]) > 0:
                n_lines[0:0] = lines[1:]
                cur_pos -= (blk_size - len(lines[0]))
            else:
                n_lines[0:0] = lines
                cur_pos -= blk_size
            fp.seek(cur_pos, os.SEEK_SET)
        if len(n_lines) > 0 and len(n_lines[-1]) == 0:
            del n_lines[-1]
    return n_lines[-n:]
def main():
    if len(sys.argv) != 3:
        sys.exit('usage: %s logfile n_lines' % sys.argv[0])
    for line in get_last_n_lines(sys.argv[1], int(sys.argv[2])):
        print(line)
if __name__ == '__main__':
    main()

Linux平台有一个tail命令,tail -f filename.log 就会打印文件最后新增加的内容。

python 怎样或读取一个文件的最后一行

有两种情况:

  1. 文件比较大时,一行一行循环直到最后一行,读取最后一行:
targetLine = ""
lineNo = 0
while 1:
    mLine = file.readline()
    if not mLine:
        break
    lineNo += 1
    if (linecount == lineNo):
        targetLine = mLine
  1. 文件比较小,直接读取全文,取最后一行数据:
targetLine = ""
mLines = file.read()
targetLine = mLines[-1]

如何用python获取文件的最后一行,文件可能会比较大

#!/usr/bin/env python
import os
import sys
def get_last_n_lines(logfile, n):
    blk_size_max = 4096
    n_lines = []
    with open(logfile, 'rb') as fp:
        fp.seek(0, os.SEEK_END)
        cur_pos = fp.tell()
        while cur_pos > 0 and len(n_lines) < n:
            blk_size = min(blk_size_max, cur_pos)
            fp.seek(cur_pos - blk_size, os.SEEK_SET)
            blk_data = fp.read(blk_size)
            assert len(blk_data) == blk_size
            lines = blk_data.split('\n')
            # adjust cur_pos
            if len(lines) > 1 and len(lines[0]) > 0:
                n_lines[0:0] = lines[1:]
                cur_pos -= (blk_size - len(lines[0]))
            else:
                n_lines[0:0] = lines
                cur_pos -= blk_size
            fp.seek(cur_pos, os.SEEK_SET)
        if len(n_lines) > 0 and len(n_lines[-1]) == 0:
            del n_lines[-1]
    return n_lines[-n:]
def main():
    if len(sys.argv) != 3:
        sys.exit('usage: %s logfile n_lines' % sys.argv[0])
    for line in get_last_n_lines(sys.argv[1], int(sys.argv[2])):
        print(line)
if __name__ == '__main__':
    main()

Linux平台有一个tail命令,tail -f filename.log 就会打印文件最后新增加的内容。 这个也可以。

如何利用python读取特定目录下的特定文件的倒数两行

读取最后2行,别信那些用readlines()的答案。那些答案,丢给你个16GB的文件就死翘翘了。老老实实用tail命令的实现方法:

  • os.seek跳转到文件末尾,os.tell判断文件大小。
  • 设置个合适的buf size,假设是1024。循环从文件末尾os.seek往回跳buf size,判断读取的内容里回车符的数量,累加回车符数量。
  • 当回车符数量大于等于2的时候,停止循环。确定倒数第二个回车符的位置,os.seek到那个位置,输出到文件末尾。 这个实现还是有坑。如果文件一直在增长,那么『最后两行』应该是程序执行当时文件的最后两行,步骤3里应该是『从倒数第二个回车符输出到步骤1中获取的文件大小位置』。