python如何读取文件指定行_Python读取文件、大文件和指定行内容的几种方法
在使用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读取文件、大文件和指定行内容的几种方法相关推荐
- python比较两个数的和_Python中的is和==比较两个对象的两种方法
Python中的is和==比较两个对象的两种方法 在Python中有两种方式比较两个对象是否相等,分别是is和==,两者之间是不同的 ==比较的是值(如同java中的equals方法) is比较的是引 ...
- python一次性读取整个文件-python逐行读取文件内容的三种方法
一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...
- python读取excel写入数据库_python读取Excel内容并写入MySQL数据库脚本
准备Excel(test.xlsx) 导库 import pymysql import xlrd 完整代码 import pymysql import xlrd def connect_databas ...
- php读取文件内容不全,php读取文件内容的三种方法
//**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...
- php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...
php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...
- python获取剪切板图片_python 获取剪切板内容的两种方法
第一种 # -*- coding: utf-8 -*- # @Time : 2020/3/16 21:26 # @File : get_text_from_cupboard_13.py # @Auth ...
- 用python修改文件内容修改txt内容的3种方法
用python修改文件内容修改txt内容的3种方法 方法一.修改原文件方式 def updateFile(file,old_str,new_str):"""替换文件中的字 ...
- 解决命令行下载Google Drive大文件出现的问题
解决命令行下载Google Drive大文件出现的问题 文件格式 Gdown下载 解决方法 文件格式 一般google drive分享的文件链接如下: https://drive.google.com ...
- linux清除文件内容 ,Linux清除文件内容的几种方法
# 清空或删除大文件内容的五种方法: # 法一:通过重定向到 Null 来清空文件内容 $ >test.sh # 法二:使用 'true' 命令重定向来清空文件 $ true > test ...
- 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)
< Python List 列表全实例详解系列(九)> __列表反转(6种方法) 本章目录: 十一.列表反转的6种方法 (11.1).通过列表的切片操作实现列表反转 (11.2).使用列表 ...
最新文章
- SQLDMO- (数据备份与恢复篇)
- android 事件驱动编程,跟我学android之四 事件驱动模型
- 进阶篇-用户界面:4.Android中常用组件
- matlab生成exe独立运行文件已破解(好用)
- [C#]WinFrom中的DataGrid单击选择行
- (79)FPGA版本如何管理?
- 转 docker 部署 kafka
- UIPageControl---iOS-Apple苹果官方文档翻译
- python-12:怎么在爬虫代码中伪装header
- 2013年广西计算机二级c语言试题及答案,2013年计算机二级C语言上机模拟试题及答案...
- 数学建模软件lingo的基本使用方法
- 计算机应用基础多媒体应用试题,2020年9月统考《计算机应用基础》多媒体技术试题及答案2...
- 人社部《劳动合同》通用范本模板
- 2021年低压电工复审考试及低压电工模拟考试
- 怎么用命令提示符测试软件网速,cmd指令测试网速技巧
- ExecuteSQL
- python——文档字符串
- css浮动以及清除浮动
- matlab通过数据进行曲线拟合 导出公式
- 2 路 FULL Cameralink 视觉检测 BOX
热门文章
- [转载红鱼儿]kbmmw 开发点滴:EarlyAuthentication
- 关于台湾通行证及入台证的办理流程(上海版)
- KMeans秘籍之如何选取初始质心
- python数据处理:分列到行
- Python getitem方法理解
- 【已解决】error: RPC failed; curl 28 OpenSSL SSL_read: Connection was reset, errno 10054 fatal: expected
- Swagger 在线接口api使用
- 「音视频」赋能又一物联网芯片平台
- java之条数和页数
- alwayson只读副本失效问题