https://github.com/kenwoodjw/python_interview_question
从今天开始,每天做几道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 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有那些?
2.补充缺失的代码
def print_directory_contents(sPath): """ 这个函数接收文件夹的名称作为输入参数 返回该文件夹中文件的路径 以及其包含文件夹中文件的路径 """
答案:
1.
def get_lines(): with open('file.txt', 'rb') as f: for i in f: yeild i
f.readlines()是将文件中的所有内容存入一个列表中,当文件较大时,会占用大量内存。答案变成成生成器函数,减少内存开支
2.
def print_directory_contents(sPath): """ 这个函数接收文件夹的名称作为输入参数 返回该文件夹中文件的路径 以及其包含文件夹中文件的路径 """ import os for s_child in os.listdir(sPath): s_child_path = os.path.join(sPath, s_child) if os.path.isdir(s_child_path) print_directory_contents(s_child_path) else: print(s_child_path)
运用了os模块中的os.listdir, os.path.join和os.path.isdir三个函数,需要牢记。此外,简单实用了迭代函数