老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Python基础入门面试题之文件操作

老男孩IT教育

常见问题

2021年5月25日 17:23

学完Python找工作,我们需要掌握各种各样的技能与知识点,今天老男孩教育为大家分享两道Python文件操作面试题,希望对你们有所帮助。

  学完Python找工作,我们需要掌握各种各样的技能与知识点,今天老男孩教育为大家分享两道Python文件操作面试题,希望对你们有所帮助。

  1、有一个jsonline格式的文件file.txt大小约为10k?

def get_lines(): 
with open('file.txt','rb') as f: 
return f.readlines() 
if __name__ == '__main__': 
for e in get_lines(): 
process(e) # 处理每一行数据 

  现在要处理一个大小为10G的文件,但是内存只有4G,如果在只修改get_lines函数而其他代码保持不变的情况下,应该如何实现?需要考虑哪些问题?

def get_lines(): 
with open('file.txt','rb') as f: 
for i in f: 
yield i

  个人认为:还是设置下每次返回的行数较好,否则读取次数太多。

def get_lines(): 
l = [] 
with open('file.txt','rb') as f: 
data = f.readlines(60000) 
l.append(data) 
yield l 

  Pandaaaa906提供的方法:

from mmap import mmap 
def get_lines(fp): 
with open(fp,"r+") as f: 
m = mmap(f.fileno(), 0) 
tmp = 0 
for i, char in enumerate(m): 
if char==b"\n": 
yield m[tmp:i+1].decode() 
tmp = i+1 
if __name__=="__main__": 
for i in get_lines("fp_some_huge_file"): 
print(i) 

  要考虑的问题有:内存只有4G无法一次性读入10G文件,需要分批读入分批读入数据要记录每次读入数据的位置。分批每次读取数据的大小,大小会在读取操作花费过多时间。

  2、补充缺失的代码

def print_directory_contents(sPath): 
""" 
这个函数接收文件夹的名称作为输入参数 
返回该文件夹中文件的路径 
以及其包含文件夹中文件的路径 
""" 
import os 
for s_child in os.listdir(s_path): 
s_child_path = os.path.join(s_path, s_child) 
if os.path.isdir(s_child_path): 
print_directory_contents(s_child_path) 
else:
print(s_child_path)

  好了,关于Python文件操作面试题就介绍这么多,希望大家能够喜欢。如果你对Python课程感兴趣,并想要通过培训快速入行,可以来我校试听,也可以通过Python自学视频栏目免费试听我们的课程。

  推荐阅读:

  python如何实现单例模式?常用方法汇总!

  如何选择合适的网络安全培训机构?老男孩培训

  Python中缩进是什么?Python全套教程

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。