#!/usr/bin/python3 import os def has_match(line): """check if file current line matches py3_strs. Args: line: Current line to check. return: Boolean True or False. """ py3_strs = [ "#!/usr/bin/python3", "#!/usr/bin/env python3", "# lint as: python2, python3", "# lint as: python3" ] for match in py3_strs: if match in line: return True return False def need_to_skip(fullname): """check if this file or folder that needs to be skipped from skip_strs. Args: fullname: Current file or folder name. return: Boolean True or False. """ skip_strs = ["__init__.py", "autotest_lib", "common.py", "site_tests"] for match in skip_strs: if match in fullname: return True return False def list_files_to_txt(upper_dir, file, suffix, nums_line_to_check): """List results to .txt file by check all target files. under the folder and subfolder. Args: upper_dir: The folder path need to check. The default. is the ipper path of this script. file: output .txt file. The default is Python2MigrationTarget.txt. suffix: File extensions that need to be checked. nums_line_to_check: The number of rows to check. return: All file names and paths that meet the standard. """ exts = suffix.split(" ") files = os.listdir(upper_dir) for filename in files: fullname = os.path.join(upper_dir, filename) if need_to_skip(fullname): continue if os.path.isdir(fullname): list_files_to_txt(fullname, file, suffix, nums_line_to_check) else: for ext in exts: if filename.endswith(ext): filename = fullname with open(filename, "r") as f: for i in range(nums_line_to_check): line = str(f.readline().strip()).lower() if has_match(line): tail = filename.split("third_party")[-1] file.write("%s, 3\n" % tail) else: tail = filename.split("third_party")[-1] file.write("%s, 2\n" % tail) break def main(): """This is main function""" upper_dir = os.path.abspath( os.path.join(os.path.dirname("__file__"), os.path.pardir)) outfile = "Python2MigrationTarget.txt" suffix = ".py" nums_line_to_check = 20 file = open(outfile, "w") if not file: print("cannot open the file %s " % outfile) list_files_to_txt(upper_dir, file, suffix, nums_line_to_check) file.close() if __name__ == "__main__": main()