草蟒“逗号表”模块介绍及中文命名随想

草蟒“逗号表”模块介绍及中文命名随想

草蟒是 Python 汉化版中文编程语言。近日,草蟒开发者老吴完成了“逗号表”模块的创建,下面对其加以介绍。

“逗号表”汉化自 csv 模块。csv 直译是“逗号分隔值”,后者直接作为中文模块名称的话太长,不合适。经考虑,老吴根据其主要特征,将对应的中文模块名确定为“逗号表”。

该模块与 csv 文件处理有关的主要对象有两个函数(写入官读取官)和两个类(字典写入官字典读取官)。各位看官可能要问:xx官 是什么意思?xx官 对应的英文是 xxer,以前一般译为 xx器,但老吴在汉化过程中感觉这样命名在某些时候不利于编程命名。假设 Python 中有一个 class Translator,如果根据一般的习惯译法,草蟒中对应的类应当叫做“翻译器类”:

类 翻译器类: …
翻译器 = 翻译器类() # 实例化

是不是有点尬?采用新译法:

类 翻译官: …
翻译员 = 翻译官()

新译法的好处是:1. 类名可以减少后缀“类”字;2. 官 与 员 对应,一看便知 xx官 是一个类,而 xx员 是其实例;3. 官-员 的对应很好地模拟了英文中“首字母大写单词表示一个类,相应的小写单词表示其实例”的规则。当然,新译法仅适用于部分动作性类名;对于更多的名词性类名,老吴尚未想到更自然的处理办法。

言归正传。假设我有一些数据,现在要用 csv 文件保存起来,那么可以这样做:

导入 逗号表

表头 = ['姓名', '班级', '语文', '数学', '英语', '名次']

学生成绩 = [
    ['张三', 10, 82, 100, 95, 1],
    ['李四', 5, 66, 97, 80, 3],
    ['王五', 8, 93, 88, 90, 2],
]

管 打开('学生成绩表.csv','w', 编码='utf8', 换行符='') 为 文:  # 换行符='' 的作用是消除空白行
    写入员 = 逗号表.写入官()
    写入员.写一行(表头)
    写入员.写多行(学生成绩)

结果是生成了一个名为 学生成绩表.csv 的文件,其内容如下:

姓名,班级,语文,数学,英语,名次
张三,10,82,100,95,1
李四,5,66,97,80,3
王五,8,93,88,90,2

现在我要读取这些同学的成绩进行处理:

导入 逗号表

管 打开('学生成绩表.csv', 编码='utf8') 为 文:
    读取员 = 逗号表.读取官()
    取 行 于 读取员:
        如果 读取员.行数 == 1:  # 读取官 的 行数 属性表示已经读取了几行
            无操作             # 第一行是标题行, 忽略
        否则:
            打印(f'{行[1]} 班{行[0]} 月考成绩: 语文 {行[2]}, '
                    f'数学 {行[3]}, 英语 {行[4]}, 排名第 {行[5]}')

输出结果如下:

10 班张三 月考成绩: 语文 82, 数学 100, 英语 95, 排名第 1
5 班李四 月考成绩: 语文 66, 数学 97, 英语 80, 排名第 3
8 班王五 月考成绩: 语文 93, 数学 88, 英语 90, 排名第 2

现在我要以每行一个字典的方式读出学生信息:

导入 逗号表

管 打开('学生成绩表.csv', 编码='utf8') 为 文:
    读取员 = 逗号表.字典读取官()
    取 行 于 读取员:
        如果 读取员.行数 == 2:  # 读取第一行数据时, 之前已经处理了表头, 所以行数是 2
            打印(读取员.字段名称)  # 列出所有字段名称
        打印()        # 现在每行以字典形式呈现, 所以下面要以 行[键] 的形式取值
        打印(f"{行['班级']} 班{行['姓名']} 月考成绩: 语文 {行['语文']}, "
                    f"数学 {行['数学']}, 英语 {行['英语']}, 排名第 {行['名次']}")

结果如下:

[‘姓名’, ‘班级’, ‘语文’, ‘数学’, ‘英语’, ‘名次’]
{‘姓名’: ‘张三’, ‘班级’: ‘10’, ‘语文’: ‘82’, ‘数学’: ‘100’, ‘英语’: ‘95’, ‘名次’: ‘1’}
10 班张三 月考成绩: 语文 82, 数学 100, 英语 95, 排名第 1
{‘姓名’: ‘李四’, ‘班级’: ‘5’, ‘语文’: ‘66’, ‘数学’: ‘97’, ‘英语’: ‘80’, ‘名次’: ‘3’}
5 班李四 月考成绩: 语文 66, 数学 97, 英语 80, 排名第 3
{‘姓名’: ‘王五’, ‘班级’: ‘8’, ‘语文’: ‘93’, ‘数学’: ‘88’, ‘英语’: ‘90’, ‘名次’: ‘2’}
8 班王五 月考成绩: 语文 93, 数学 88, 英语 90, 排名第 2

现在将字典形式的行信息写入一个新的文件 学生成绩表字典.csv

导入 逗号表

表头 = ['姓名', '班级', '语文', '数学', '英语', '名次']

学生成绩 = [
    {
     '姓名': '张三', '班级': '10', '语文': '82', 
        '数学': '100', '英语': '95', '名次': '1'},
    {
     '姓名': '李四', '班级': '5', '语文': '66', 
        '数学': '97', '英语': '80', '名次': '3'},
    {
     '姓名': '王五', '班级': '8', '语文': '93', 
        '数学': '88', '英语': '90', '名次': '2'}
]

管 打开('学生成绩表字典.csv','w', 编码='utf8', 换行符='') 为 文:
    写入员 = 逗号表.字典写入官(, 表头)  # 必须提供 字段名称 参数值, 在本例中即 表头
    写入员.写表头()
    写入员.写多行(学生成绩)

写入文件的结果与 学生成绩表.csv 相同。

“逗号表”模块还有一个重要的属性容器类——方言类,其属性包括:定界符引号字符转义符双引号跳过初始空白行结束符加引号。你可以继承此类或其已有子类(比如 excel),创建自己的方言,从而实现 csv 格式的自定义。例如:

导入 逗号表

类 我的方言(逗号表.方言类):
    定界符 = '|'
    引号字符 = '='
    行结束符 = '\r'
    加引号 = 逗号表.非数字加引号啊  # xx啊 是什么鬼? 

逗号表.注册方言('川普', 我的方言)

表头 = ['姓名', '班级', '语文', '数学', '英语', '名次']

学生成绩 = [
    ['张三', 10, 82, 100, 95, 1],
    ['李四', 5, 66, 97, 80, 3],
    ['王五', 8, 93, 88, 90, 2],
]

管 打开('学生成绩表方言版.csv','w', 编码='utf8', 换行符='') 为 文:
    写入员 = 逗号表.写入官(, 方言='川普')
    写入员.写一行(表头)
    写入员.写多行(学生成绩)

学生成绩表方言版.csv 的内容如下:

=姓名=|=班级=|=语文=|=数学=|=英语=|=名次=
=张三=|10|82|100|95|1
=李四=|5|66|97|80|3
=王五=|8|93|88|90|2

读取的时候也要使用相同的方言,否则鸡同鸭讲,不知所云。

管 打开('学生成绩表方言版.csv','r', 编码='utf8') 为 文:
    读取员 = 逗号表.读取官(, 方言='川普')
    取 行 于 读取员:
        打印()

结果如下:

[‘姓名’, ‘班级’, ‘语文’, ‘数学’, ‘英语’, ‘名次’]
[‘张三’, 10.0, 82.0, 100.0, 95.0, 1.0]
[‘李四’, 5.0, 66.0, 97.0, 80.0, 3.0]
[‘王五’, 8.0, 93.0, 88.0, 90.0, 2.0]

在上面的代码中,方言类的“加引号”属性有四个值可以选取:最少引号啊全部加引号啊非数字加引号啊不加引号啊。各位看官可能好奇,编程又不是作诗,啊什么啊?在草蟒中,以“啊”结尾的名称表示一个常量,对应 python 中的全大写常量,比如:非数字加引号啊 = QUOTE_NONNUMERIC。这个啊字,在汉语中是表示强调的虚词,加啊的特殊名称与不加啊的一般名称相区分,很好地模拟了英文全大写常量与一般变量的区别,可谓异曲同工。另外,这些“啊”字是不是也让代码变得更有温度?

另外,英文编程中一个单词的多种缩写形式让编程命名显得非常灵活,中文编程在这方面似乎不行。真的不行吗?老吴认为非也,不过我们要反其道而行,增字而不是缩字。

l = ['grasspy', 'python', 'good', 'yes']
lst = ['oh', 'ye']
li = ['ok', 'bye']

# 中文编程
列表哦 = ['草蟒', '中文编程', '语言']
列表哈 = ['草蟒', '易语言']
列表啦 = ['你好', '再见']

以上就是老吴的提议:通过增加 等极易敲出的虚词来极大增强中文命名的灵活性。

由此可以看出,只要开动脑筋,英文编程的优点完全可以在中文中创造出来。

注意:“逗号表”模块尚未并入草蟒官网发行版中,预计将在春节前并入,敬请关注!

你可能感兴趣的:(csv,python,编程语言)