最后更新于 .

前段时间一直没写博客,昨天更新了一篇,今天突然又来了兴致,那就再更新一篇吧(所以说啊,治疗拖延症最好的方法就是现在开始做) 这篇还是一些技术的整理,主要是用于备忘,大家如果觉得太简单就一笑而过啦~

一. python通过图片内容判断图片类型

前段时间写了一个小站练手,http://xiangshuguo.com,一个支持自由上传的图片小站。 因为要限制上传图片的格式,所以要做文件类型检测,代码如下:

def get_image_type(pd, is_path=True):
    '''
    获取图片的类型,支持传入路径和文件内容
    '''
    if is_path:
        f = file(pd, 'rb')
        data = f.read(10).encode('hex')
    else:
        data = pd.encode('hex')

    ftype = None

    if data.startswith('ffd8'):
        ftype = 'jpeg'
    if data.startswith('424d'):
        ftype = 'bmp'
    if data.startswith('474946'):
        ftype = 'gif'
    elif data.startswith('89504e470d0a1a0a'):
        ftype = 'png'

    return ftype

二. stringstream使用陷阱(1)

我直接举一个例子吧

stringstream ss;
int x;

ss << "190";
ss >> x;

cout << x;

这个代码是没有问题的,结果会是:

190

如下的代码:

stringstream ss;
string x;

ss << "190";
ss >> x;

cout << x;

也是没有问题的,输出也是:

190

然而这样的代码:

stringstream ss;
string x;

ss << "x y z";
ss >> x;

cout << x;

输出将会是:

x

好吧,看了文档才发现,当 stringstream将数据导出到一个字符串变量时,它会用空格分割。 但说实话,同一个操作符,意义却不一样,这真挺让人纠结。。

三. stringstream使用陷阱(2)

如果你习惯了C分割的atoi直接将空字符串转成0,那么用stringstream时,千万不要做这种事情,因为如下代码:

stringstream ss;
int x;
ss << "";
ss >> x;
cout << x;

输出将并不一定是0。

四. MySQL多库表的查询方法

腾讯内部使用MySQL数据库都是分库表的,所以在mysql中想手工查询个数据都会变得非常困难,所以这里放个简单的模板,要用的时候,只要用vim对应生成一下就可以了

select * from(
select * from db_app_right0.tb_app_right0
union
select * from db_app_right0.tb_app_right1
)as t  into outfile '/tmp/mx';

五. MySQL安全删除数据的做法

这个其实是来自公司DBA的建议啦,这里分享一下 关于delete,我这里建议你们 做任何的delete操作之前先执行如下备份语句:

create backup.tablename as select * from dbname.tablename  where id = 90000;
delete from dbname.tablename  where id = 90000;

恢复语句:

insert into dbname.tablename select * from backup.tablename;

还有一个习惯, 如果确信自己删的数据只有一条 加个 limit 1 OK,就这样

Pingbacks

  1. MySQL安全删除数据的做法 | 胖熊猫的幸福生活 on #

    [...] 来源:http://www.vimer.cn/2012/01/%E6%9C%80%E8%BF%91%E7%9A%84%E4%B8%80%E4%BA%9B%E6%8A%80%E6%9C%AF%E6%95%B4... [...]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 依云

    依云 on #

    呃,第一个,我直接调用 file 命令的~

    Reply

    1. Dante

      Dante on #

      哈,我就知道发出来是有好处的,依云详细说说说?

      Reply

      1. 依云

        依云 on #

        不说,只贴链接 :-P
        https://github.com/Vim-cn/elimage/blob/master/main.py#L30

        Reply

        1. Dante

          Dante on #

          咦,这个貌似是通过文件名来区分的?这个不太安全吧?

          Reply

          1. 依云

            依云 on #

            后边上传时是通过文件名区分的,浏览器访问时是用 file 命令检测的。所以,这里不仅可以上传图片,还可以上传其它东西哦~
            记得标记过 FIXME 还是 TODO 的,不过我觉得这样方便啊。

            Reply

  2. wujiwh

    wujiwh on #

    Tested! 我上传了一张Vim_command,很不错的小站,简洁,实用!但是垃圾图片的自动清理也是个问题吧

    Reply

    1. Dante

      Dante on #

      哈哈,看到了~~
      嗯呢,我也在考虑怎么保证自由的情况下又能减少垃圾。。

      Reply

  3. IceQ

    IceQ on #

    问下博主 “如果确信自己删的数据只有一条 加个 limit 1” 这种做法有什么依据? 我只是去测试了下查询时间 发现加了貌似还变慢了 求解~

    Reply

    1. Dante

      Dante on #

      这个只是为了防止误删多条哈,没别的意思哈

      Reply

  4. Zind

    Zind on #

    1. stringstream 使用陷阱 (1)
    那个应该不是 stringstream 的问题,而是输入操作符 &gt;&gt; 的问题:
    用输入操作符 &gt;&gt; 写 string 对象时,空白字符('' '\t' '\n')将会被忽略
    2. stringstream 使用陷阱 (2)
    stringstream 是流类型,比较特殊,使用时确实不容易把握
    但是,string 类型(即便为空)貌似不能转化为 int 类型使用吧?
    下面的用法非法:
    <pre lang="cpp">
    cout &lt;&lt; static_cast(string("hello, vimer!")) &lt;&lt; endl;
    cout &lt;&lt; static_cast(string("")) &lt;&lt; endl;
    cout &lt;&lt; static_cast(string("190")) &lt;&lt; endl;
    </pre>

    Reply

    1. Zind

      Zind on #

      被转义了,再试一次:
      <pre lang="cpp" line="1">
      cout &lt;&lt; static_cast(string("hello, vimer!")) &lt;&lt; endl;
      cout &lt;&lt; static_cast(string("")) &lt;&lt; endl;
      cout &lt;&lt; static_cast(string("190")) &lt;&lt; endl;
      </pre>

      Reply

      1. Dante

        Dante on #

        嗯? 我没有用string直接转int呀,我是用stringstream在转~

        Reply

  5. joel

    joel on #

    图片小站也是用的bottle吗?

    Reply

    1. Dante

      Dante on #

      对滴~ 哈哈
      结构基本就是这篇文章分享的:
      http://www.vimer.cn/2011/12/bottle%E5%81%9Aweb%E5%BC%80%E5%8F%91%E7%9A%84%E7%89%A9%E7%90%86%E8%AE%BE%E8%AE%A1.html

      Reply

      1. joel

        joel on #

        能否分享下源码供学习下呀?

        Reply

        1. Dante

          Dante on #

          等站完善一些,会考虑开源哈

          Reply

          1. joel

            joel on #

            主要是想看看学习下数据库部分的, 现在这样就可以,不需要代码太漂亮啦

            Reply

  6. zhuizhuziwo

    zhuizhuziwo on #

    四. MySQL多库表的查询方法
    腾讯内部使用MySQL数据库都是分库表的,所以在mysql中想手工查询个数据都会变得非常困难,所以这里放个简单的模板,要用的时候,只要用vim对应生成一下就可以了

    我们部门都使用phpMyAdmin,而且对里面的查询语句进行了一个处理。$i这个符号代表分表的情况如(1-9)。在后台默认进行对多个表处理。
    仅供参考。

    Reply

  7. moper

    moper on #

    呼呼,支持分享~我只能来凑热闹了

    Reply

发表评论