AS3程序在编译的过程中,有一个特点是这样的,不管是项目中的类,还是标准库或者第三方库的类,编译的时候只会把用到的那些类文件编译进去,也就是说,某一些类,只要没有被主程序引用到,那这个文件是不会被编译进来的。实际的表现是,在程序运行的过程中,getDefinitionByName是不能获取到没有引用的类,因为这个类根本就不在主程序运行的域里面。

这也就带来一个问题,在一些应用场合下,我需要用到某个类,但用到他却是通过反射机制来获取的(通过getDefinitionByName去获取)。举例来说,我有一个文件夹,是用来放主程序要用到的数据文件(数据是用AS3来描述的),但实际用的过程中,都是通过动态获取,如果数据类比较少,几个几十个这样,那问题不大,一旦数据类非常多,上百上千个就非常麻烦了;还有的情况是,数据类是通过其他程序按照一定的规则来生成的,所以每次类的名称都是不同的,而主程序获取数据也是通过一定的规则获取。这种的情况下,我希望有一个程序来完成这样的事情,在编译之前,把指定文件夹下面的所有AS3类文件的信息,解析到一个指定的文本文件里面。要让一个类保证编译进去,非常简单,只要在主程序中保证使用用到就行,简单的声明一下就好,这也是下面这个Python程序干的事情。

多说两句,Python是我目前用过的语言里面,我最喜欢的,简洁、优雅、易懂,写Python代码就和写伪代码一样,每一行代码都能很清晰的把你的目的表达清楚,所以它还有另外一个名字:“可执行的伪代码”。在学习的过程中,也了解到了另外一个有意思的词:Pythonic,这个词的意思,简单点说,就是用Python的风格写Python。怎么说呢,我记得之前我看过一篇文章,说有一些人在学习新的语言的时候,不能摆脱掉旧语言的一些桎梏,总是试图用旧有的思维去使用新的工具,新鞋走老路、新瓶装旧酒,这样写出来的代码,运行起来没有问题,但对于一个熟悉这门语言的老鸟来说,这种代码怎么看怎么别扭,古怪而且累赘,难以理解,而且由于前期测试程度有限,这些代码被保留了下来,潜伏在阴暗的角落中,成为整个项目的毒瘤。

毕竟,程序是给人看的,只是凑巧机器可以运行而已。

Pythonic这个词,也可以推广到其他语言中,比如C++的《Effective c++》,不同的语言都有不同的设计思想,这也决定了在写代码的时候,会有一些约定俗成的规则。Python提供了优美的语法,强大的标准库以及丰富的第三方扩展,在写之前,最少应该浏览一遍《Python Manuals》,以下的程序的作用如上所述,是一个非常简单的脚本,我在写的时候,已经尽量保证做到Pythonic,一方面是为了了解更多的特性,另一方面我有个同事要喷我。

这个程序,我最开始用Java写过,用了173行(当然这和我不了解Java有关),简直是惨不忍睹,用Python完成仅仅使用了39行代码,我学习Python的语法加上阅读官方文档不过2天时间而已,也谈不上多了解,从这点来看,学习成本非常低。

Python代码:

import os

def list_file(dir_name, ext):
result = []
for root, dirs, files in os.walk(dir_name):
result.extend(os.path.join(root, file_name) for file_name in files if file_name.endswith(ext))
return result def list_class(root, root_sep, ext):
return (format_name(root_sep, file_name, ext) for file_name in list_file(root, ext)) def format_name(root_sep, file_name, ext):
file_name = file_name.replace(ext, "").replace(root_sep, "").replace("\\", ".")
return "import %s; %s;" % (file_name, file_name) def export_file(root_list, ext, out_file):
with open(out_file, "w") as f:
for root in root_list:
f.writelines(class_name + "\n" for class_name in list_class(root, root + "\\", ext)) def main():
root_list = ["D:\\My Documents\\Flash Builder 4.5\\game\\src", "D:\\My Documents\\Flash Builder 4.5\\Easily\\src"]
ext = ".as"
out_file = "import.as"
export_file(root_list, ext, out_file) if __name__ == "__main__":
main()

导出文件:

import org.easily.utils.IDUtils; org.easily.utils.IDUtils;
import org.easily.utils.MathUtils; org.easily.utils.MathUtils;
import org.easily.utils.NumberUtils; org.easily.utils.NumberUtils;
import org.easily.utils.ObjectCache; org.easily.utils.ObjectCache;
import org.easily.utils.Offsets; org.easily.utils.Offsets;
import org.easily.utils.ShapeUtils; org.easily.utils.ShapeUtils;
import org.easily.utils.Singleton; org.easily.utils.Singleton;
import org.easily.utils.StringUtils; org.easily.utils.StringUtils;
import org.easily.utils.TimeUtil; org.easily.utils.TimeUtil;
import org.easily.utils.WebUtils; org.easily.utils.WebUtils;
import org.easily.utils.XMLUtil; org.easily.utils.XMLUtil;

(Python)导出指定文件夹中as文件的完全限定类名的更多相关文章

  1. 基于Python——实现两个文件夹中的文件拷贝

    [背景]当复制一个文件夹中的某文件到另一个文件夹中时是一件很容易的事情,可是如果存在很多文件夹中的文件需要一一拷贝,就会变的很繁琐,稍有不慎就会遗漏,今天就用Python来解决这个问题—— [代码实现 ...

  2. python遍历文件夹中所有文件夹和文件,os.walk

    python中可以用os.walk来遍历某个文件夹中所有文件夹和文件. 例1: import os filePath = 'C:/Users/admin/Desktop/img' for dirpat ...

  3. Python列出文件夹中的文件

    几乎所有的关于操作系统的内容可以在python 官方文档中找到:https://docs.python.org/3/library/os.html#module-os 其中os.path被单独列出:h ...

  4. python 遍历文件夹中所有文件

    '''使用walk方法递归遍历目录文件,walk方法会返回一个三元组,分别是root.dirs和files. 其中root是当前正在遍历的目录路径:dirs是一个列表,包含当前正在遍历的目录下所有的子 ...

  5. python将test01文件夹中的文件剪切到test02文件夹中

    将test01文件夹中的文件剪切到test02文件夹中 import shutil import os def remove_file(old_path, new_path): print(old_p ...

  6. cocos项目导入其它源文件时加入依赖库时,头文件提示找不到文件夹中的文件

    cocos项目导入其它源文件时加入依赖库时,头文件提示找不到文件夹中的文件解决方法: 选择项目属性->c/c++->常规,在附加包括项目中加上对应的文件夹 cocos test项目的库(所 ...

  7. 【转载】C#代码开发过程中如何快速比较两个文件夹中的文件的异同

    在日常的使用电脑的过程中,有时候我们需要比较两个文件夹,查找出两个文件夹中不同的文件以及文件中不同的内容信息,进行内容的校对以及合并等操作.其实使用Beyond Compare软件即可轻松比较,Bey ...

  8. java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数

    File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...

  9. C++获取文件夹中所有文件

    获取文件夹中的文件,用到过很多次,每次用的时候都要去查下,很烦,所以想自己写下,当然,借鉴了很多其他大佬的博客 主要实现的函数,如下: void getFiles( string path, vect ...

  10. linux批量替换指定文件夹中所有文件的指定内容

    命令:sed -i "s#https#http#g" `grep http -rl VEROMODA` 功能:用来替换当前目录VEROMODA文件夹及子文件夹中所有文件中的http ...

随机推荐

  1. Coding过程中遇到的一些bug

    1. 在使用layoutSubviews方法调整自定义view内部的子控件坐标时,最好不要使用子控件的centerX,centerY属性,否则会出现奇怪的bug. 如果一定要用,务必仔细检查,该子控件 ...

  2. 计划将项目中使用entity framework的要点记录到改栏目下

    ef监控sql执行性能日志.http://www.cnblogs.com/CreateMyself/p/5277681.html http://123.122.205.38/cn_sql_server ...

  3. CentOS-6 yum安装nginx php53 mysql55 搭建LNMP环境

    1.导入外部软件库 01.rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noa ...

  4. 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题

    项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()" ...

  5. 分享大家一个背景为下雪的JQuery

    <html><head> <meta charset="utf-8"> <meta content="IE=edge,chrom ...

  6. [转]装完CentOS后,重新开机启动后显示: Initial setup of CentOS Linux 7 (core)

    转:装完Centos7提示Initial setup of CentOS Linux 7 (core)   在用U盘装完CentOS后,重新开机启动后显示: Initial setup of Cent ...

  7. 微信端应用 ionic实现texarea 自适应高度

    最近公司项目,做微信端用到texarea 需要实现自适应高度的功能 当然自适应高度的方法很多网上找一大片,最直接的方式就是在使用到texarea的controller中添加js代码事件来实现,这中方式 ...

  8. 通过setDB2Client*来方便的使用TRACE调优jdbc程序

    一般来说通过TRACE的report来分析DDF的性能问题的话,基本对DBA都是噩梦一样.因为所有的Thread都是通过DDF一个类型的Thread,所以不管你怎么分类,看Accounting rep ...

  9. python开发进阶之路(一)

    哎!好久没有写博客了,怪想念的,今天听了偶像的讲解,好多以前感觉很模糊的概念今天一下子就明朗了.下面就来整理一下今天的收获 一.如何成为一名优秀的开发人员 1.1  得先对自己使用的开发语言了如指掌, ...

  10. POJ 2516:Minimum Cost(最小费用流)

    https://vjudge.net/problem/11079/origin 题意:有N个商店和M个供应商和K种物品,每个商店每种物品有一个需求数,每个供应商每种物品有一个供应量,供应商到商店之间的 ...