python读取大文件目录_65.Python读取大文件
方式一
import os
path = r"C:\Users\yzt\Desktop\work\InfosecTestPlatform\libs\Log\mainline1-nohup.log"
#####################
"""
file.seek(off, whence=0):
從文件中移動(dòng)off個(gè)操作標(biāo)記(文件指針),正往結(jié)束方向移動(dòng),負(fù)往開(kāi)始方向移動(dòng)。
如果設(shè)定了whence參數(shù),就以whence設(shè)定的起始位為準(zhǔn),0代表從頭開(kāi)始,1代表當(dāng)前位置,2代表文件最末尾位置。(注意都是相對(duì)位置)
"""
#####################
f = open(path, "r", encoding='utf-8')
print(f.tell())
f.seek(10)
print(f.tell())
f.seek(3)
print(f.tell())
#####################
f = open(path, "rb")
size = os.path.getsize(path)
print(size)
print(f.tell()) # 獲取文件指針位置
# print(f.tell())
f.seek(10, 1) # 1表示正續(xù)移動(dòng), 1表示當(dāng)前位置,10表示想后移動(dòng)10個(gè)字符
print(f.tell())
f.seek(-15, 2) # 2表示倒敘移動(dòng),2表示從文件末尾開(kāi)始,-15表示向前移動(dòng)15個(gè)字符
print(f.tell())
print(f.readlines()[-1].decode()) # 這個(gè)時(shí)候光標(biāo)移動(dòng)到了文件的-15個(gè)字符處,直接讀取其后面的文字(注意需要使用decode解碼)
# 方式一: 寫(xiě)一個(gè)函數(shù)使用,我需要讀取文件的后0.15M(可以自行調(diào)節(jié))數(shù)據(jù)返給前端
def read_log(path):
log_read_size = 150 * 1024 # 默認(rèn)讀取0.5M數(shù)據(jù)(文件的最后0.1M大約500-100行)
size = os.path.getsize(path)
logFile = open(path, 'rb')
if size > log_read_size:
print(size, "*" * 50)
logFile.seek(0, 2)
logFile.seek(-log_read_size, 2)
str1 = logFile.read().decode()
print(len(str1))
return str1
else:
return logFile.read().decode()
read_log(path)
方式二
import os
path = r"C:\Users\yzt\Desktop\work\InfosecTestPlatform\libs\Log\mainline1-nohup.log"
def tail(inputfile):
"""這個(gè)函數(shù)也可以做到讀取文件后幾行數(shù)據(jù),不足之處需要自己改"""
file_size = os.path.getsize(inputfile)
block_size = 1024
dat_file = open(inputfile, 'r')
last_line = ""
if file_size > block_size:
maxseekpoint = (file_size // block_size) # 最為seek的最大值
dat_file.seek((maxseekpoint - 1) * block_size)
elif file_size:
# maxseekpoint = block_size % file_size
dat_file.seek(0, 0)
lines = dat_file.readlines()
if lines:
# last_line = lines[-1].strip()
# 最后兩行,N行就改數(shù)字,即可
last_line = lines[-2:]
# print "last line : ", last_line
dat_file.close()
return last_line
錯(cuò)誤方式(其實(shí)一開(kāi)始是好的然后過(guò)了一周用不了了我很懵逼)
1G文件讀取后五千行
import os
from InfosecTestPlatform import settings
file_url = os.path.join(settings.BASE_DIR, "libs/Log/mainline1-jmeter.log")
print(os.path.exists(file_url))
fp = open(file_url, 'r', encoding='utf-8')
# 我將1G的文件,讀出來(lái)放在一個(gè)生成器中
file_list = [line for line in fp]
# 使用列表反向切片方式讀取,后5000行
file_last_5000 = file_list[:-5001:-1]
# 由于數(shù)據(jù)是方向的所有再次方向讀取,還原為正向
file_last = file_last_5000[::-1]
# 之后拼接返回
str1 = "".join(file_last)
# 下面是我是用循環(huán)寫(xiě)了一個(gè)1G的日志文件
# fp_w = open(file_url, 'w', encoding='utf-8')
# for i in range(500):
# fp_w.write("")
總結(jié)
以上是生活随笔為你收集整理的python读取大文件目录_65.Python读取大文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: micropython是啥 知乎_嵌入式
- 下一篇: linux解压zip文件命令介绍(Lin