第二阶段考试题(答案)¶
- 一个大小为100G的文件 etl_log.txt,要读取文件中的内容,写出具体过程代码。
# 如果文件有很多行
with open('etl_log.txt',mode='r',encoding="utf-8") as file_object:
for line in file_object:
pass
# 如果文件只有一行
import os
file_size = os.path.getsize("etl_log.txt.txt")
read_size = 0
with open('etl_log.txt.txt', 'rb') as file_object:
while read_size < file_size:
data = file_object.read(1)
read_size += len(data)
- 编写一个函数,这个函数接受一个文件夹名称作为参数,寻找文件夹中所有文件的路径并输入(包含嵌套)。
import os
def get_file_path(folder_path):
for base_path, folder_list, file_list in os.walk(folder_path):
for file in file_list:
file_path = os.path.join(base_path, file)
print(file_path)
- 以下的代码数据的结果是什么?
def extend_list(val, data=[]):
data.append(val)
return data
list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list("a")
print(list1, list2, list3)
- python代码获取命令行参数。
- 简述深浅拷贝?
- 基于推导式一行代码生成1-100以内的偶数列表。
- 请把以下函数转化为python lambda匿名函数
- 看代码写结果
- 列表推导式和生成器表达式 [i % 2 for i in range(10)] 和 (i % 2 for i in range(10)) 输出结果分别是什么?
[i % 2 for i in range(10)] ,得到一个列表,内部元素是 [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
(i % 2 for i in range(10)) ,的到一个生成器对象。
-
写装饰器
-
re的match和search区别?
-
正则匹配中的贪婪模式与非贪婪模式的区别?
-
sys.path.append("/root/mods")的作用?
-
写函数
有一个数据结构如下所示,请编写一个函数从该结构数据中返画由指定的 字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。 DATA = { "time": "2016-08-05T13:13:05", "some_id": "ID1234", "grp1": {"fld1": 1, "fld2": 2, }, "xxx2": {"fld3": 0, "fld4": 0.4, }, "fld6": 11, "fld7": 7, "fld46": 8 } fields:由"|"连接的以fld开头的字符串, 如fld2|fld7|fld29 def select(fields): print(DATA) return resultDATA = { "time": "2016-08-05T13:13:05", "some_id": "ID1234", "grp1": {"fld1": 1, "fld2": 2, }, "xxx2": {"fld3": 0, "fld4": 0.4, }, "fld6": 11, "fld7": 7, "fld46": 8 } def select(fields): result = {} field_list = fields.split('|') for field in field_list: value = DATA.get(field) if not value: continue result[field] = value return result -
编写函数,实现base62encode加密(62进制),例如:
内部维护的数据有:0123456789AB..Zab..z(10个数字+26个大写字母+26个小写字母)。 当执行函数: base62encode(1),获取的返回值为1 base62encode(61),获取的返回值为z base62encode(62),获取的返回值为10 base62encode(63),获取的返回值为11思路:一直让输入的数值除以62取余数,以此取到的余数分别是每一位的索引位置。 5/62 得到 0 , 余数 5 05 62/62 得到 1 , 余数 0 10 178/62 得到 2 ,余数 54 2P 98723/62 得到1592,余数19 [C,B,K] 1592/62 得到25,余数42import string import itertools MAP = list(itertools.chain(string.digits, string.ascii_uppercase, string.ascii_lowercase)) def base62encode(num): total_count = len(MAP) position_value = [] while num >= total_count: num, remain = divmod(num, total_count) position_value.insert(0, MAP[remain]) position_value.insert(0, MAP[num]) result = "".join(position_value) return result -
基于列表推导式一行实现输出9*9乘法表。