文档章节

python 常用

 人生如梦19
发布于 2016/05/16 20:56
字数 1418
阅读 61
收藏 8

python读取命令行参数

本文实例讲述了python读取命令行参数的方法。具体分析如下:如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?

需要模块:sys
参数个数:len(sys.argv)
脚本名:    sys.argv[0]
参数1:     sys.argv[1]
参数2:     sys.argv[2]

import sys
print "脚本名:", sys.argv[0]
for i in range(1, len(sys.argv)):
  print "参数", i, sys.argv[i]
>>>python test.py hello world

脚本名:test.py
参数 1 hello
参数 2 world

python中使用命令行选项:

例如一个脚本,它的作用是处理一个文件,并将处理后的结果输出到另一个文件中。要求该脚本满足以下条件:

1.通过-i -o选项来区别参数是输入文件还是输出文件.
>>> python convert.py -i inputfile -o outputfile
2.当不知道convert.py需要哪些参数时,用-h打印出帮助信息
>>> python convert.py -h

getopt函数原形: getopt.getopt(args, options[, long_options])

import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hi:o:")
input_file=""
output_file=""
for op, value in opts:
  if op == "-i":
    input_file = value
  elif op == "-o":
    output_file = value
  elif op == "-h":
    usage()
    sys.exit()

代码解释:

a) sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。

b) "hi:o:": 当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":"号。所以"hi:o:"就表示"h"是一个开关选项;"i:"和"o:"则表示后面应该带一个参数。

c) 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。

getopt函数的第三个参数[, long_options]为可选的长选项参数,上面例子中的都为短选项(如-i -o)

长选项格式举例:

--version
--file=error.txt

让一个脚本同时支持短选项和长选项

getopt.getopt(sys.argv[1:], "hi:o:", ["version", "file="])

Python源代码文件字符编码

在 python 源代码文件中,如果用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下:

  1. # code: UTF-8

常见编码介绍:

  • GB2312编码:适用于汉字处理、汉字通信等系统之间的信息交换
  • GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码
  • ASCII编码:是对英语字符和二进制之间的关系做的统一规定
  • Unicode编码:这是一种世界上所有字符的编码。当然了它没有规定的存储方式。
  • UTF-8编码:是 Unicode Transformation Format - 8 bit 的缩写, UTF-8 是 Unicode 的一种实现方式。它是可变长的编码方式,可以使用 1~4 个字节表示一个字符,可根据不同的符号而变化字节长度。

编码转换:Python内部的字符串一般都是 Unicode编码。代码中字符串的默认编码与代码文件本身的编码是一致的。所以要做一些编码转换通常是要以Unicode作为中间编码进行转换的,即先将其他编码的字符串解码(decode)成 Unicode,再从 Unicode编码(encode)成另一种编码。

  • decode 的作用是将其他编码的字符串转换成 Unicode 编码,eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码
  • encode 的作用是将Unicode编码转换成其他编码的字符串,eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码

在进行编码转换的时候须先知道 name 是那种编码,然后 decode 成 Unicode 编码,最后再 encode 成需要编码的编码。如果 name 已经是 Unicode 编码了,就不需要进行 decode 进行解码转换了,直接用 encode 就可以了。值得注意的是:对 Unicode 进行编码和对 str 进行编码都是错误的。

具体的说就是:如果在UTF-8文件中,则这个字符串就是 UTF-8编码的。它的编码取决于当前的文本编码。要在同一个文本中进行两种编码的输出等操作就必须进行编码的转换,先用decode将文本原来的编码转换成Unicode,再用encode将编码转换成需要转换成的编码。

eg:
由于内置函数 open() 打开文件时,read() 读取的是 str,读取后需要使用正确的编码格式进行 decode()。write() 写入时,如果参数是 Unicode,则需要使用你希望写入的编码进行 encode(),如果是其他编码格式的 str,则需要先用该 str 的编码进行 decode(),转成 Unicode 后再使用写入的编码进行 encode()。如果直接将 Unicode 作为参数传入 write() ,python 将先使用源代码文件声明的字符编码进行编码然后写入。

  1. # coding: UTF-8
  2.  
  3. fp1 = open('test.txt', 'r')
  4. info1 = fp1.read()
  5. # 已知是 GBK 编码,解码成 Unicode
  6. tmp = info1.decode('GBK')
  7.  
  8. fp2 = open('test.txt', 'w')
  9. # 编码成 UTF-8 编码的 str
  10. info2 = tmp.encode('UTF-8')
  11. fp2.write(info2)
  12. fp2.close()

获取编码的方式:
判断是 s 字符串否为Unicode,如果是返回True,不是返回False :

  1. isinstance(s, unicode)

下面代码可以获取系统默认编码:

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. import sys
  4. print sys.getdefaultencoding()

 

python urlib2 http请求

http://blog.csdn.net/mack415858775/article/details/39696107

© 著作权归作者所有

共有 人打赏支持
上一篇: 测试覆盖率
下一篇: python urllib2
粉丝 12
博文 60
码字总数 395354
作品 0
商丘
私信 提问
关于Python面试的四点,你做到就万事大吉了!

第一点:Python 因为面试的是Python爬虫岗位,面试官大多数会考察面试者的基础的Python知识,包括但不限于: Python2.x与Python3.x的区别 Python的装饰器 Python的异步 Python的一些常用内置...

糖宝lsh
09/29
0
0
Python内置的字符串处理函数整理

Python内置的字符串处理函数整理 27 May 2011 16:30 Friday by 小屋标签: 函数 字符串 Python 字符串处理 收集常用的Python 内置的各种字符串处理 函数的使用方法 str='python String funct...

行者深蓝
2014/02/14
0
0
买《Python从小白到大牛》专题视频课程,送配套纸质图书

经过一年多时间的呕心沥血,Python立体化图书——《Python从小白到大牛》即将与大家见面了。所谓立体化图书包括:电子图书、视频、课件和服务等内容。 《Python从小白到大牛》纸质图书将于9...

tony关东升
07/23
0
0
VisualStudioCode插件下载

vscode的插件想离线安装,则先需要先行下载 插件官网 下载链接的模板 举例说明(Python插件) Python插件页面 其中 ${publisher}的值为ms-python ${extension name}的值为python ${version}...

t_huanghai
06/26
0
0
学习笔记(10月20日) --python数据类型&字符串常用方法

一周五次课(10月20日) 1.学习python的整型 1.1、raw_input()和input()的区别 raw_input() 将所有输入作为字符串看待,返回字符串类型;而input()在对待纯数字输入时具有自己的特性,它返回...

wanyang_wanyang
07/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
2
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
4
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部