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