在使用python处理文本的时候,经常会需要读取文件的内容。如果文件比较小,那么直接使用open文件对象打开文件,再通过read()方法最为方便,这种方法就是把文件内容读出来后放到内存变量。

read

f = open('/var/log/nginx/zhangnq.com.log','rb')

#读取全部

log_data = f.read()

f.close()

# 按行读取

但是,当文件很大比如10GB,这种方法就会撑爆内存,爆出类似memoryError的错误。所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。

如果是处理连续文本内容,文件对象还支持readline()和readlines()两个方法。不同的是readline()没执行一次读取一行,readlines()会把所有内容都读出来。所以readlines方法不适用大文件。

readline

import time

f = open('/var/log/nginx/zhangnq.com.log','rb')

while True:

print(f.readline())

time.sleep(1)

内存使用:占用不到4兆。

readlines

import time

f = open('/var/log/nginx/zhangnq.com.log','rb')

for line in f.readlines():

print(line)

time.sleep(1)

内存使用:内存占用50多兆。

分块读取

那么另外一个比较好的办法是把大文件分块,这里用到python迭代器yield。

# 读取大文件

def read_in_chunks(file_path, chunk_size=1024*1024):

"""

Lazy function (generator) to read a file piece by piece.

Default chunk size: 1M

You can set your own chunk size

"""

file_object = open(file_path)

while True:

chunk_data = file_object.read(chunk_size)

if not chunk_data:

break

yield chunk_data

默认一次读取1兆大小的内容。

with open

另外找到一个办法。可以用with语句打开和关闭文件,包括抛出一个内部块异常。for line in f文件对象f视为一个迭代器,会自动的采用缓冲IO和内存管理,所以你不必担心大文件。

with open(...) as f:

for line in f:

process(line) #

读取指定行内容

对于小文件,最简单是用readlines方法读取文件内容到列表,然后再使用列表和分片。

f = open('/var/log/nginx/zhangnq.com.log','rb')

data = f.readlines()

# 读取 第一行到第十行内容

print(data[0:10])

如果是大文件,可行的方法是先分块读取文件,然后再把指定行内容保存下来。不过这个办法有个小问题,被分块的那行内容取不全,而且效率不高。

例如:

# 读取文件多行间内容

def read_file_lines(file_path, line_start=1, line_end=-1):

content_list = list()

i = 1

for chunk in read_in_chunks(file_path, 1024*1024*10):

for tmp in chunk.split('\n'):

if line_end != -1:

if i >= line_start and i <= line_end: content_list.append(tmp) else: if i >= line_start:

content_list.append(tmp)

i += 1

return content_list

有更好的办法欢迎交流。

python如何读取文件指定行_Python读取文件、大文件和指定行内容的几种方法相关推荐

  1. python比较两个数的和_Python中的is和==比较两个对象的两种方法

    Python中的is和==比较两个对象的两种方法 在Python中有两种方式比较两个对象是否相等,分别是is和==,两者之间是不同的 ==比较的是值(如同java中的equals方法) is比较的是引 ...

  2. python一次性读取整个文件-python逐行读取文件内容的三种方法

    一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...

  3. python读取excel写入数据库_python读取Excel内容并写入MySQL数据库脚本

    准备Excel(test.xlsx) 导库 import pymysql import xlrd 完整代码 import pymysql import xlrd def connect_databas ...

  4. php读取文件内容不全,php读取文件内容的三种方法

    //**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...

  5. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  6. python获取剪切板图片_python 获取剪切板内容的两种方法

    第一种 # -*- coding: utf-8 -*- # @Time : 2020/3/16 21:26 # @File : get_text_from_cupboard_13.py # @Auth ...

  7. 用python修改文件内容修改txt内容的3种方法

    用python修改文件内容修改txt内容的3种方法 方法一.修改原文件方式 def updateFile(file,old_str,new_str):"""替换文件中的字 ...

  8. 解决命令行下载Google Drive大文件出现的问题

    解决命令行下载Google Drive大文件出现的问题 文件格式 Gdown下载 解决方法 文件格式 一般google drive分享的文件链接如下: https://drive.google.com ...

  9. linux清除文件内容 ,Linux清除文件内容的几种方法

    # 清空或删除大文件内容的五种方法: # 法一:通过重定向到 Null 来清空文件内容 $ >test.sh # 法二:使用 'true' 命令重定向来清空文件 $ true > test ...

  10. 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)

    < Python List 列表全实例详解系列(九)> __列表反转(6种方法) 本章目录: 十一.列表反转的6种方法 (11.1).通过列表的切片操作实现列表反转 (11.2).使用列表 ...

最新文章

  1. SQLDMO- (数据备份与恢复篇)
  2. android 事件驱动编程,跟我学android之四 事件驱动模型
  3. 进阶篇-用户界面:4.Android中常用组件
  4. matlab生成exe独立运行文件已破解(好用)
  5. [C#]WinFrom中的DataGrid单击选择行
  6. (79)FPGA版本如何管理?
  7. 转 docker 部署 kafka
  8. UIPageControl---iOS-Apple苹果官方文档翻译
  9. python-12:怎么在爬虫代码中伪装header
  10. 2013年广西计算机二级c语言试题及答案,2013年计算机二级C语言上机模拟试题及答案...
  11. 数学建模软件lingo的基本使用方法
  12. 计算机应用基础多媒体应用试题,2020年9月统考《计算机应用基础》多媒体技术试题及答案2...
  13. 人社部《劳动合同》通用范本模板
  14. 2021年低压电工复审考试及低压电工模拟考试
  15. 怎么用命令提示符测试软件网速,cmd指令测试网速技巧
  16. ExecuteSQL
  17. python——文档字符串
  18. css浮动以及清除浮动
  19. matlab通过数据进行曲线拟合 导出公式
  20. 2 路 FULL Cameralink 视觉检测 BOX

热门文章

  1. [转载红鱼儿]kbmmw 开发点滴:EarlyAuthentication
  2. 关于台湾通行证及入台证的办理流程(上海版)
  3. KMeans秘籍之如何选取初始质心
  4. python数据处理:分列到行
  5. Python getitem方法理解
  6. 【已解决】error: RPC failed; curl 28 OpenSSL SSL_read: Connection was reset, errno 10054 fatal: expected
  7. Swagger 在线接口api使用
  8. 「音视频」赋能又一物联网芯片平台
  9. java之条数和页数
  10. alwayson只读副本失效问题