python 有趣的小题目

从以下网站摘录的经典题目:

Python面试宝典_qq_24816993的博客-CSDN博客_python面试宝典

https://blog.csdn.net/qq_24816993/article/details/81904280

 

现在考虑有一个 jsonline 格式的文件 file.txt 大小约为 10K,之前处理文件的代码如下所示.

def get_lines():

    l = []

    with open(‘file.txt’,‘rb’) as f:

        for eachline in f:

            l.append(eachline)

    return l

if __name__ == ‘__main__’:

    for e in get_lines():

              process(e)  #处理每一行的数据

 

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

 

要考虑的问题:

内存只有4G无法一次性读入10G的文件,需要分批读入。分批读入数据要记录每次读入数据的位置。

要考虑每次读入数据的大小,太小就会在读取操作上花费过多的时间。

修改后的程序

def get_lines():

    # l=[]

    flag=True  #因为一次性无法读取完,所以要循环读取,flag是循环标志

    with open('file.txt','rb') as f:

        while flag:      #以flag为标志,来循环读取完10G的数据

            data=f.readlines(1000)  #挑选适合的一次读入内容,保证读取上不会浪费过多的时间

            # l.append(data)

            if data:

                yield data  #把每次读取到的数据都返回,用yield便于迭代

            else:

                flag=False

关于yield和return 可以参考如下网址:

python中yield的用法详解——最简单,最清晰的解释_mieleizhi0522的博客-CSDN博客_yield

https://blog.csdn.net/mieleizhi0522/article/details/82142856

 

 

 

 

 

接收文件夹名称作为输入参数,返回该文件夹中文件的路径,具体如下:

def print_directory_contents(sPath):

    '''

    这个函数接收文件夹的名称作为输入参数。

    返回该文件夹中文件的路径

    以及其包含文件夹中文件的路径

    '''

    #请补充代码

 

#首先导入os库
import os
def print_directory_contents(sPath):
    #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    #只支持在 Unix, Windows 下使用。
    for sChild in os.listdir(sPath):
        #os.path.join(path1,path2,...)用于路径拼接文件路径
        sChildPath=os.path.join(sPath,sChild)
        #os.path.isdir()函数判断是否为文件夹,是文件夹返回True.
        if os.path.isdir(sChildPath):
            print_directory_contents(sChildPath)
        else:
            print(sChildPath)


path = 'C:\\Users\\LG\\Desktop\\c# learn'
print_directory_contents(path)

 

 

 

随机数

在python中用生成随机数的模块是random,在使用前需要import。

 

random.random():生成一个0-1之间的随机浮点数、

 

random.uniform(a,b):生成[a, b]之间的浮点数。

 

ramdom.randint(a,b):生成【a,b】之间的整数。

 

random.randrange(a,b,step):在指定的集合[a, b)中,以step为基数随机取一个数。

 

random.choice(sequence):从特定序列中随机取一个元素,这里的序列可以是字符串,列表,元组等。

 

打乱一个排好序的list对象

import random

#random.shuffle()会在原地进行操作,没有返回值。

random.shuffle(list)

python日志

Python中自带logging模块,用于日志管理。调用logging.basicConfig()方法,配置需要的日志等级和相关参数,Python解释器会按照配置的参数生成相应的日志。

 

 

关于Python程序的运行,有什么手段能提升性能。

使用多进程,充分利用机器的多核性能。

对于性能意向比较大的部分代码,可以使用c或c++编写。

对于IO阻塞造成的性能影响,可以使用IO多路复用来解决。

尽量使用Python的内置函数。

尽量使用局部变量。

 

posted @ 2021-07-13 15:28  Lee597  阅读(137)  评论(0)    收藏  举报