1、题目python
定义文件 xx.tar.gz 的产生方式以下:函数
以 xx 为文件名的文件经过 tar 和 gzip 打包压缩产生,该文件中以字符串的方式记录了一个非负整数;spa
或者以 xx 为名的目录经过 tar 和 gzip 打包压缩产生,该目录中包含若干名如 xx.tar.gz 的压缩包。code
其中 xx 即 00、0一、0二、03 这样的数字。现给定一个根据上述定义生成的文件 00.tar.gz,请肯定其中包含的以xx 为文件名的文件个数以及这些文件中所记录的非负整数之和。递归
一个按此规则生成的文件 00.tar.gz 的下载地址:http://pan.baidu.com/s/1mgBpurQip
2、分析字符串
本题利用了递归的方法对压缩包 00.tar.gz 及其下子压缩包进行解压缩后读取文件get
3、代码class
import os import tarfile import time time_start = time.time() #解压缩函数 def unpack_path_file(parentdir, file_name): archive = tarfile.open(parentdir + "/" + file_name, "r:gz") for tarinfo in archive: archive.extract(tarinfo, parentdir) archive.close() #初始目录 root_dir = "temp" #结果值 result = 0 #检查目录 def search_folder(parent_dir): global result #print("检查目录:" + parent_dir) #解压缩全部可解压文件 for file_name in os.listdir(parent_dir): #print(file_name) if os.path.isfile(parent_dir + "/" + file_name) and file_name.find(".tar.gz") != -1: #print("解压缩压缩包:" + parent_dir + "/" + file_name) unpack_path_file(parent_dir, file_name) #计算全部解压后文件内容 for file_name in os.listdir(parent_dir): if os.path.isfile(parent_dir + "/" + file_name) and file_name.find(".tar.gz") == -1: #print("读取文件:" + parent_dir + "/" + file_name) temp_file = open(parent_dir + "/" + file_name) number = temp_file.read() temp_file.close() result = result + int(number) #print("读取到的数字:" + number + ";数字总和:" + str(result)) #进入子目录继续 for dir_name in os.listdir(parent_dir): if os.path.isdir(parent_dir + "/" + dir_name): #print("搜索目录:" + parent_dir + "/" + dir_name) search_folder(parent_dir + "/" + dir_name) search_folder(root_dir) #输出结果 time_finish = time.time() time_span = time_finish - time_start #print("一" * 10) print("计算结果:" + str(result)) print("共计用时:%.2f" % time_span)
4、运行结果import
如下是该段代码在Python3.4.2中的运行结果:
END