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的内置函数。
尽量使用局部变量。

浙公网安备 33010602011771号