本文目录一览:
- python 怎么读取文件每行的开头和末尾?
- 如何用python最快的获取大文件的最后几行
- python 怎样或读取一个文件的最后一行
- 如何用python获取文件的最后一行,文件可能会比较大
- 如何利用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 怎样或读取一个文件的最后一行
有两种情况:
- 文件比较大时,一行一行循环直到最后一行,读取最后一行:
targetLine = ""
lineNo = 0
while 1:
mLine = file.readline()
if not mLine:
break
lineNo += 1
if (linecount == lineNo):
targetLine = mLine
- 文件比较小,直接读取全文,取最后一行数据:
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中获取的文件大小位置』。