优雅的python

2017.3.19

看两年前刚开始学些 python 时候自己幼稚的代码,觉得很有趣。当时属于闲着也是闲着的心态,没想到这两年里面 python 那么红火,当时自认为也就是业余学学找个项目做做,结果公司也开始正式用 python,在好几个领域,自己也热心于做 python 的布道者。且越是学习越觉得其博大精深。


用python,就一个理由,优雅。

这年头,编程语言太多,每个都很牛,我也没空学这么多,还是python看得顺眼,加上我怎么也算是大数据中的小半个实践者,除了R以外,一定要试试python这么优雅的语言,google也就用js、python和java,看来我这里的js(node)、java和php是不够了,我们就开始python来打造全栈语言吧。

看了几天,的确很容易学,代码简洁不罗嗦,资料也很多,基本上google一下都有。花了几个小时写了一个个数据中心的小工具,用来给csv文件中的用户联系信息作敏感信息加密和提供一致性的md5签名,自我感觉不错。当然中间也是查了好多次google,很多基本的东西一开始也不知道,现在的写法估计里面也有一些恶俗的地方,但是至少pycharm已经认为代码的写法没有任何问题了。python做做这类小工具真不错,处理2000行数据也就是瞬间。

代码贴出来,纪念一下。关于python本身的知识点,慢慢分享,感觉国内资料还是比较少,也有一些错误,当然还有很多转载,看上去多,用处却不大。

# create: 2015.5.25. by david.yi
# 2015.5.27. by david.yi 完成基本功能,细节还需要完善
# 2015.5.27. by david.yi 完成基本功能,输入csv文件,将电子邮件和手机敏感处理后输出csv文件
# v1.0.0 2015.5.28. by david.yi 基本完成

__author__ = 'david.yi'

import csv


# 转换后的内容先记录到二维dict中,便于后续写入到csv文件文件
# 初始化清空
_csv = []

# 记录csv的header,也就是列名称
_csv_header = []


# md5 函数
# edit date: 2015.5.27. by david.yi 创建
# 输入: str 字符串
# 输出: 经过md5计算的值
def get_md5(s):
    import hashlib

    m = hashlib.md5()
    m.update(s.encode('utf-8'))
    return m.hexdigest()


# 打开并转换csv文件,对电话号码和电子邮件进行md5签名,以及替换
# edit date:2015.5.27. by david.yi  创建
def open_csv_file():
    import os
    
    # 用户输入csv文件名
    csv_filename = input('Please input the source csv filename: ')

    # 检查文件是否存在,存在则打开csv文件
    # 不存在的话,提示后退出程序
    if not(os.path.exists(csv_filename)):
        print('csv file not exists, program quit')
        exit()

    # 打开本地文件
    with open(csv_filename, 'r') as csv_file:

        # 读入csv文件到dict,用DictReader方法比较容易获得列名,便于后续处理
        csv_source = csv.DictReader(csv_file)

        # 记录csv文件的header,也就是列的名称列表
        global _csv_header
        _csv_header = csv_source.fieldnames

        print(_csv_header)

        # 按照行循环,读出csv文件中的具体内容人哦我,row为dict中的每一行
        for row in csv_source:

            # 用户手机号码
            user_mobile = row['usr_mp']

            # 手机号码的md5
            user_mobile_md5 = get_md5(user_mobile)

            # 手机号码后四位替换为*
            user_mobile_encode = user_mobile[0:7]+'****'

            # 用户电子邮件
            user_email = row['usr_email']

            # 电子邮件的md5
            user_email_md5 = get_md5(user_email)

            # 电子邮件的@前面内容替换为*
            user_email_encode = '*****' + user_email.split('@')[1]

            # 临时s
            s = row

            # s追加处理过的四个key
            s['usr_mp_encode'] = user_mobile_encode
            s['usr_email_encode'] = user_email_encode
            s['usr_mp_md5'] = user_mobile_md5
            s['usr_email_md5'] = user_email_md5

            # s删除原来的手机和电子邮件key
            s.pop('usr_mp')
            s.pop('usr_email')

            # 写入dict,将用于后面写入到csv文件
            _csv.append(s)

        print(_csv)

    # 关闭文件
    csv_file.close()


# 写入csv文件
# edit date:2015.5.27. by david.yi  创建
def write_csv():

    # 用户输入csv文件名
    csv_filename = input('Please input the result csv filename (return for use default NEW.csv): ')

    if len(csv_filename) <= 0:
        csv_filename = 'new.csv'

    # 打开csv文件,准备写入转换后的结果
    with open(csv_filename, 'w') as csv_file:

        global _csv_header
        # 设定csv文件头,追加4个处理过的key
        _csv_header.append('usr_mp_encode')
        _csv_header.append('usr_email_encode')
        _csv_header.append('usr_mp_md5')
        _csv_header.append('usr_email_md5')
        # 删除原来header中的手机和电子邮件key
        _csv_header.remove('usr_mp')
        _csv_header.remove('usr_email')

        # 设定写入方式是dict
        writer = csv.DictWriter(csv_file, fieldnames=_csv_header)

        # 写入csv头
        writer.writeheader()

        # 写入csv文件内容
        writer.writerows(_csv)

    # 关闭文件
    csv_file.close()

    print("write csv file ok")

# main process 主执行流程

print('chinapnr data center csv user info encrypt program')
print('ver 1.0.0, 2015.5.28.  by david.yi')


# 打开并转换csv文件
open_csv_file()

# 写入csv文件
write_csv()

 

春夏秋冬又一春

最近更新很少,主要是网站打开一直有点问题,也一直在纠结要不要迁移回mediatemple,不过后者看来也不怎么样,至少官网打开都有问题。

也可能是平时大多数时间在公司打开的关系,公司访问国外服务器网站是很有问题。

想来不能懒惰,不找理由,今天测试了一下,网站打开速度还是可以的,那么要继续梦想和情怀了。

每年五月,这位朋友会回到上海,这个我们曾经一起学习工作过,愤懑过,惆怅过,醉过,哭过的地方。

的确不是那么多美好的记忆,但又怎么样呢。

今朝有酒今朝醉,千金散尽还复来。

我从前遵循的很多所谓规矩,如今回头看看,很多只是一种禁锢以及逃避的理由。泰山崩于面前而不慌,多好。其他的,又怎么样呢。

以前无法理解国外一些人,怎么可以拼命工作拼命玩,原来这才是生活。

所以说,离别是为了更好的相聚。对朋友来说,如此,对自己来说,也是如此。

五月记忆

四月底搬到了新居,仿佛一切从头开始。也算是一种挑战。

作为个人生活能力一向比较差的我来说,从购房到装修,再到后期的种种事情,可以说是煎熬,可以说是学习。生命就是这样的折腾。

中国股市又一轮大涨,让我想起2007年左右时候很多的故事,小小的一个轮回,很多故事从头开始。

发现这个网站很多时候都不太能正常访问,又在纠结要不要转移到mt之类上。

总觉得有很多东西想说,想留下,但有时候却又怕留下。