Python布局,读写文件



用模块来合理组织你的Python 代码是简单又自然的方法。你应该建立一种统一且容易阅读的结构,并将它应用到每一个文件中去。下面就是一种非常合理的布局:
# (1) 起始行(Unix)
# (2) 模块文档

# (3) 模块导入
# (4) 变量定义
# (5) 类定义
# (6) 函数定义
# (7) 主程序
图3–1 一个典型模块的内部结构图解。

主程序
无论这个模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码。通常这里不会有太多功能性代码,而是根据执行的模式调用不同的函数


推荐代码风格:主程序调用main()函数

主程序代码通常都和你前面看到的代码相似,检查 __name__ 变量的值然后再执行相应的调用(参阅下一页的核心笔记)。

主程序中的代码通常包括变量赋值, 类定义和函数定义,随后检查__name__来决定是否调用另一个函数(通常调用main()函数)来完成该模块的功能。主
程序通常都是做这些事。(我们上面的例子中使用test()而不是main()是为了避免你在读到核心笔记前感到迷惑。) 不管用什么名字,我们想强调一点那就是:这儿是放置测试代码的好地方。大部分的Python 模块都是用于导入调用的,直接运行模块应该调用该模块的回归测试代码。


核心笔记:__name__ 指示模块应如何被加载,由于主程序代码无论模块是被导入还是被直接执行都会运行, 我们必须知道模块如何决定运行方向。一个应用程序可能需要导入另一个应用程序的一个模块,以便重用一些有用的代码(否则就只能用拷贝粘贴那种非面向对象的愚蠢手段)。这种情况下,你只想访问那些位于其它应用程序中的代码,而不是想运行那个应用程序。因此一个问题出现了,“Python 是否有一种方法能在运行时检测该模块是被导入还是被直接执行呢?” 案就是......(鼓声雷动).....没错! __name__ 系统变量就是正确答案。

如果模块是被导入, __name__ 的值为模块名字
如果模块是被直接执行, __name__ 的值为 '__main__'


在主程序中书写测试代码

优秀的程序员和软件工程师,总是会为我们的应用程序提供一组测试代码或者简单教程。
对那些仅仅为了让别的程序导入而创建的模块来说, Python 有效的简化了这个任务。这些模块理论上永远不会被直接执行, 那么,在这个模块被直接执行时进行系统测试岂不妙哉? 设置起来难吗? 一点儿也不。
测试代码仅当该文件被直接执行时运行, 也就是说不是被别的模块导入时。上文及核心笔记中提到如何判断一个模块是被直接运行还是被导入。我们应该利用 __name__ 变量这个有利条件。将测试代码放在一个或者叫main(), 或者叫test()(或者你随便取个啥名字)的函数中,

如果该模块是被当成脚本运行, 就调用这个函数。

if __name__ == '__main__'

添加改程序的测试代码


================写文件==========================

#!/usr/bin/python

import os
ls = os.linesep

fname = raw_input('enter the file name: ')

#fname ='/root/licmtest/test1.txt'

while True:

        if os.path.exists(fname):
                print "ERROR:'%s' already exists" %fname
                break
        else:

                break         

all=[]
print "\nEnter lines('.'by itself to quit).\n"

while True:
        entry = raw_input('>')
        if entry == '.':
                break
        else:
                all.append(entry)

fobj = open(fname,'w')
fobj.writelines(['%s%s' %(x,ls) for x in all])
fobj.close()
print 'Done!'

==============

python中,os.linesep是干什么的?----------------   os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。

os.path.exists() 是 os 模块中一个有用的函数, 帮助我们确认这一点。 当有输入一个不存在的文件名时, os.path.exists() 才会返回 False, 这时我们中断循环继续下面
的代码。

==================读文件=================

#!/usr/bin/python
fname = raw_input('Enter your filename like</root/licmtest/test1.txt>')
#fname = '/root/licmtest/test1.txt'
try:
        fobj = open(fname,'r')

except IOError,e:

        print "***file open error: ", e

else:

        for eachline in fobj:
                print eachline,

        fobj.close

===========for循环的使用:

['%s%s' % (x, ls) for x in all]

>>> squared = [x ** 2 for x in range(4)]
>>> for i in squared:
... print i
0
1
4
9

======================

3def displayNumType(num):
4 print num, 'is',
5 if isinstance(num, (int, long, float, complex)):
6 print 'a number of type:', type(num).__name__
7 else:
8 print 'not a number at all!!'
9
10 displayNumType(-69)
11 displayNumType(9999999999999999999999L)
12 displayNumType(98.6)
13 displayNumType(-5.2+1.9j)
14 displayNumType('xxx')








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值