python学习笔记十 类文件对象 分类: python基础学习 python 2013-06-18 12:03 254人阅读 评论(0) 收藏
2013-06-18 12:03
429 查看
详见 163博客收藏夹
1,
类文件对象是任意一个带有read方法的对象,read方法有一个可选的size参数。
如果没有指定size,就会从输入源读入所有的数据作为单个字符串返回,否则,只读入size个数据返回。再次调用会从size处接着读。
2,
解析来自url的xml文件:
>>> importurllib
>>> usock =urllib.urlopen('http://slashdot.org/slashdot.rdf') (1)
>>> xmldoc =minidom.parse(usock) (2)
>>> usock.close()(3)
>>> printxmldoc.toxml() (4)
将打印出xml文件
urlopen接受url作为参数,返回一个类文件对象。
3,
解析字符串xml:
>>> contents ="<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> xmldoc =minidom.parseString(contents) (1)
>>> printxmldoc.toxml()
<?xml version="1.0" ?>
<grammar><refid="bit"><p>0</p><p>1</p></ref></grammar>
使用minidom的parseString函数,接受用string表示的xml
这样不方便,需要用parse之外的函数,可以将string包装成类文件对象。
使用StringIO:
>>> contents ="<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> importStringIO
>>> ssock =StringIO.StringIO(contents) (1)
>>> ssock.read()(2)
"<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> ssock.read()(3)
''
>>> ssock.seek(0)(4)
>>> ssock.read(15)(5)
'<grammar><refi'
>>>ssock.read(15)
"d='bit'><p>0</p"
>>> ssock.read()
'><p>1</p></ref></grammar>'
>>> ssock.close()(6)
StringIO包中的StringIO类可以将字符串转换成类文件对象。
上例还体现了使用size参数的效果:下一次从size的地方接着读。
用类文件方式解析字符串的代码:
>>> contents ="<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> ssock =StringIO.StringIO(contents)
>>> xmldoc =minidom.parse(ssock) (1)
>>>ssock.close()
>>> printxmldoc.toxml()
<?xml version="1.0" ?>
<grammar><refid="bit"><p>0</p><p>1</p></ref></grammar>
4,
类文件对象stdout,stderr。这两个对象是只写的,没有read方法,但是可以通过将它们绑定到其他的类文件对象来得到不同的输出的位置,默认是打印到屏幕。
例如:
#stdout.py
import sys
print 'Dive in' (1)
saveout = sys.stdout (2)
fsock = open('out.log', 'w') (3)
sys.stdout = fsock (4)
print 'This message will be logged instead of displayed' (5)
sys.stdout = saveout (6)
fsock.close() (7)
(2)始终在重定向前保存stdout,这样之后还可以设置回来。
(5)这句话将打印到文件out.log中
重定向stderr完全一样。
5,
链接命令
[you@localhost kgp]$ python kgp.py -g binary.xml (1)
01100111
[you@localhost kgp]$ cat binary.xml (2)
<?xml version="1.0"?>
<!DOCTYPE grammar PUBLIC "-//diveintopython.org//DTDKant Generator Pro v1.0//EN" "kgp.dtd">
<grammar>
<ref id="bit"><p>0</p><p>1</p>
</ref>
<ref id="byte"><p><xrefid="bit"/><xrefid="bit"/><xrefid="bit"/><xrefid="bit"/>\
<xref id="bit"/><xrefid="bit"/><xrefid="bit"/><xrefid="bit"/></p>
</ref>
</grammar>
[you@localhost kgp]$ cat binary.xml | python kgp.py -g - (3)(4)
10110001
(2)window用type代替cat
(3)|表示管道,就是不输出到屏幕,而作为下一个命令的标准输入
(4)-表示脚本从标准输入载入脚本,而不是磁盘上的特定文件
6,
命令行参数
如下文件:
#argecho.py
import sys
for arg in sys.argv: (1)
print arg
将输出自己的所有参数,例如:
[you@localhost py]$ python argecho.py (1)
argecho.py
[you@localhost py]$ python argecho.py abc def (2)
argecho.py
abc
def
[you@localhost py]$ python argecho.py --help (3)
argecho.py
--help
[you@localhost py]$ python argecho.py -m kant.xml (4)
argecho.py
-m
kant.xml
在sys.argv中包含了命令行参数的信息。
7,
对与复杂的参数,要使用getopt模块。
getopt模块的getopt函数有三个参数:参数列表、一个包含所有程序可能接收到的单字符命令行标志、和一个等价于单字符命令行标志的长命令行标志的列表。
getopt会抛出异常。
例如:
def main(argv):
grammar = "kant.xml" (1)
try:
opts, args =getopt.getopt(argv, "hg:d", ["help", "grammar="]) (2)
exceptgetopt.GetoptError: (3)
usage() (4)
sys.exit(2)
...
if __name__ == "__main__":
main(sys.argv[1:])
长命令行标志对应短命令行标志,比如-help和-h的效果是一样的,这就是第三个参数指定的作用。
-g后面会需要一个参数(比如例子中需要一个语法参数的名称),但是目前不知道,所以用:代替。
在上面的例子中,-d没有对应的长参数。
1,
类文件对象是任意一个带有read方法的对象,read方法有一个可选的size参数。
如果没有指定size,就会从输入源读入所有的数据作为单个字符串返回,否则,只读入size个数据返回。再次调用会从size处接着读。
2,
解析来自url的xml文件:
>>> importurllib
>>> usock =urllib.urlopen('http://slashdot.org/slashdot.rdf') (1)
>>> xmldoc =minidom.parse(usock) (2)
>>> usock.close()(3)
>>> printxmldoc.toxml() (4)
将打印出xml文件
urlopen接受url作为参数,返回一个类文件对象。
3,
解析字符串xml:
>>> contents ="<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> xmldoc =minidom.parseString(contents) (1)
>>> printxmldoc.toxml()
<?xml version="1.0" ?>
<grammar><refid="bit"><p>0</p><p>1</p></ref></grammar>
使用minidom的parseString函数,接受用string表示的xml
这样不方便,需要用parse之外的函数,可以将string包装成类文件对象。
使用StringIO:
>>> contents ="<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> importStringIO
>>> ssock =StringIO.StringIO(contents) (1)
>>> ssock.read()(2)
"<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> ssock.read()(3)
''
>>> ssock.seek(0)(4)
>>> ssock.read(15)(5)
'<grammar><refi'
>>>ssock.read(15)
"d='bit'><p>0</p"
>>> ssock.read()
'><p>1</p></ref></grammar>'
>>> ssock.close()(6)
StringIO包中的StringIO类可以将字符串转换成类文件对象。
上例还体现了使用size参数的效果:下一次从size的地方接着读。
用类文件方式解析字符串的代码:
>>> contents ="<grammar><refid='bit'><p>0</p><p>1</p></ref></grammar>"
>>> ssock =StringIO.StringIO(contents)
>>> xmldoc =minidom.parse(ssock) (1)
>>>ssock.close()
>>> printxmldoc.toxml()
<?xml version="1.0" ?>
<grammar><refid="bit"><p>0</p><p>1</p></ref></grammar>
4,
类文件对象stdout,stderr。这两个对象是只写的,没有read方法,但是可以通过将它们绑定到其他的类文件对象来得到不同的输出的位置,默认是打印到屏幕。
例如:
#stdout.py
import sys
print 'Dive in' (1)
saveout = sys.stdout (2)
fsock = open('out.log', 'w') (3)
sys.stdout = fsock (4)
print 'This message will be logged instead of displayed' (5)
sys.stdout = saveout (6)
fsock.close() (7)
(2)始终在重定向前保存stdout,这样之后还可以设置回来。
(5)这句话将打印到文件out.log中
重定向stderr完全一样。
5,
链接命令
[you@localhost kgp]$ python kgp.py -g binary.xml (1)
01100111
[you@localhost kgp]$ cat binary.xml (2)
<?xml version="1.0"?>
<!DOCTYPE grammar PUBLIC "-//diveintopython.org//DTDKant Generator Pro v1.0//EN" "kgp.dtd">
<grammar>
<ref id="bit"><p>0</p><p>1</p>
</ref>
<ref id="byte"><p><xrefid="bit"/><xrefid="bit"/><xrefid="bit"/><xrefid="bit"/>\
<xref id="bit"/><xrefid="bit"/><xrefid="bit"/><xrefid="bit"/></p>
</ref>
</grammar>
[you@localhost kgp]$ cat binary.xml | python kgp.py -g - (3)(4)
10110001
(2)window用type代替cat
(3)|表示管道,就是不输出到屏幕,而作为下一个命令的标准输入
(4)-表示脚本从标准输入载入脚本,而不是磁盘上的特定文件
6,
命令行参数
如下文件:
#argecho.py
import sys
for arg in sys.argv: (1)
print arg
将输出自己的所有参数,例如:
[you@localhost py]$ python argecho.py (1)
argecho.py
[you@localhost py]$ python argecho.py abc def (2)
argecho.py
abc
def
[you@localhost py]$ python argecho.py --help (3)
argecho.py
--help
[you@localhost py]$ python argecho.py -m kant.xml (4)
argecho.py
-m
kant.xml
在sys.argv中包含了命令行参数的信息。
7,
对与复杂的参数,要使用getopt模块。
getopt模块的getopt函数有三个参数:参数列表、一个包含所有程序可能接收到的单字符命令行标志、和一个等价于单字符命令行标志的长命令行标志的列表。
getopt会抛出异常。
例如:
def main(argv):
grammar = "kant.xml" (1)
try:
opts, args =getopt.getopt(argv, "hg:d", ["help", "grammar="]) (2)
exceptgetopt.GetoptError: (3)
usage() (4)
sys.exit(2)
...
if __name__ == "__main__":
main(sys.argv[1:])
长命令行标志对应短命令行标志,比如-help和-h的效果是一样的,这就是第三个参数指定的作用。
-g后面会需要一个参数(比如例子中需要一个语法参数的名称),但是目前不知道,所以用:代替。
在上面的例子中,-d没有对应的长参数。
相关文章推荐
- open()文件对象的seek、tell方法详解 分类: python基础学习 open()文件读写 python Module 2013-09-05 09:40 450人阅读 评论(0) 收藏
- file()创建文件方法 分类: python python基础学习 2012-12-24 18:17 239人阅读 评论(0) 收藏
- 依次读取文件中的一个字符 分类: python基础学习 python 小练习 2013-08-22 11:14 289人阅读 评论(0) 收藏
- yield生成器对象返回Fiabs元素 分类: python 小练习 python基础学习 2014-01-13 10:28 193人阅读 评论(0) 收藏
- 使用os.popen/commands.getoutput查询指定端口号的服务 分类: python 小练习 open()文件读写 python基础学习 2013-09-17 17:49 798人阅读 评论(0) 收藏
- 使用文件进行优化 分类: python 小练习 divide into python python基础学习 2014-01-01 14:13 228人阅读 评论(0) 收藏
- 文件操作注意事项 分类: python 小练习 python基础学习 open()文件读写 2013-12-03 11:05 532人阅读 评论(0) 收藏
- python中的对象和引用 分类: python基础学习 2013-10-30 16:20 264人阅读 评论(0) 收藏
- 使用类、类属性、对象属性 分类: python基础学习 2014-03-19 16:22 220人阅读 评论(0) 收藏
- 对象使用self注意事项 分类: python基础学习 2013-09-03 09:52 218人阅读 评论(0) 收藏
- python yield生成器 分类: python基础学习 2013-08-04 15:40 324人阅读 评论(0) 收藏
- Python 使用 Xlrd/xlwt 操作 Excel 分类: python基础学习 2014-03-17 12:06 958人阅读 评论(0) 收藏
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
- Python中单/双下划线使用 分类: python python基础学习 2013-09-02 21:31 1764人阅读 评论(0) 收藏
- 使用getattr() 分类: python基础学习 divide into python 2014-02-24 15:50 198人阅读 评论(0) 收藏
- win7 下安装ipython 分类: python基础学习 software 2013-10-19 12:23 1383人阅读 评论(0) 收藏
- os.walk()方法 分类: python Module python基础学习 2013-08-09 07:59 342人阅读 评论(0) 收藏
- FC网络学习笔记01 分类: 网络基础 2013-10-10 09:42 865人阅读 评论(0) 收藏
- 移除连续重复的字符串元素 分类: python 小练习 python基础学习 divide into python 2014-01-01 15:53 392人阅读 评论(0) 收藏
- linux之cut用法 分类: ubuntu 测试 python基础学习 2014-02-10 14:54 213人阅读 评论(0) 收藏