所有测试语句基于Python 2.7.6 ,Ubuntu14.04 LTS
自学Python,如果哪里说的不对,还请指正。谢谢。
示例绝大部分来自博客园vamei的python教程
1.文件读写操作
一. 按字节读取文件#!/usr/bin/env python#coding=UTF-8#默认python编码是ASCII编码 要支持中文#加上coding=UTF-8的声明#open()打开文件 r只读 w写入 a追加 r+ w+ a+模式#a+方式打开文件 指针指向结尾 , r方式 指针在文件头#f.tell() 测试文件偏移位置 f.seek() 改变文件流file = open('test.txt','r')
content= file.read(1024)#读取N bytes字节数据file.close()PRint"按字节读取:",'\n',content
没有其他高级语言繁琐的文件流操作,open()函数拿到文件对象直接操作,简单粗暴。
二. 按行读取文件
file = open('test.txt','r')
content= file.readline()#读取一行file.close()print"按行读取:","\n",content
记得使用完后,关闭文本对象。file.close()
三.文件写入操作
#打开某个文件 如果没有则创建file = open('temp.txt','w')
file.write('Python is good!\n')#擦除文件内容,且只能写一行file.writelines(['Objective-c is bad!\n','Swift is wtf?\n','C# andjavawhich better'])
file.close()
file= open('temp.txt','rw')
content= file.readlines()#读取所有行,存储在列表中file.close()
index=0while(index <len(content)):printcontent[index]
index+= 1
往文件中写入多行内容,使用readlines() 读取所有行,并返回一个list对象。Python中对象的方法命名格式不是驼峰法,
导致我经常写成类似readLines() 第二单词首字母的大写的形式,感觉Python的方法命名受c语言影响,这个还需要慢慢适应。
2.模块的简单使用先在test.py的目录下建立一个utils.py文件,我们将之前的写的判断闰年的函数和自定义的SuperList类放在一起,以便其他模块使用。
#!/usr/bin/env python#coding=UTF-8#自定义list子类 添加对类似 [1,2,3] - [2,3]运算的支持#这种自带两个__下划线的方法 是特殊方法classSuperList(list):def__sub__(self,b):#self是SuperList的对象,可以使用类似 list[:] 的方式表示整个list对象a =self[:]
b=b[:]#如果list包含b中的元素,就移除,直到循环结束 len()返回list中元素个数whilelen(b) >0 :
element_b= b.pop()#pop() 从list中弹出最后一个元素值,并返回他的值ifelement_bina :
a.remove(element_b)returna#这里的-减号运算符代表__sub__() 方法,类似+ 代表__add()__#特殊方法和运算符相等价#print SuperList([1,2,3,4]) - SuperList([1,2])#函数定义 是否为闰年defisLeafYear(year):returnyear%400==0or(year%100!=0andyear%4==0)
我们再建立一个model.py文件,将utils模块导入
#! /usr/bin/env python#coding=UTF-8importutils#一个.py文件就构成一个模块'''import a as b # 引入模块a,并将模块a重命名为b
from a import function1 # 从模块a中引入function1对象。调用a中对象时
# 我们不用再说明模块,即直接使用function1,而不是a.function1。
from a import * #从模块a中引入所有对象 (类似Java的导包)'''#Python搜索模块顺序'''1. 程序所在的文件夹
2. 标准库的安装路径
3.操作系统环境变量PYTHONPATH所包含的路径'''#模块.对象的方式来调用a = utils.isLeafYear(2004)printa
ls= utils.SuperList([2,3,4,5]) - utils.SuperList([1,2,5])printls
通过导入的方式使用现成的方法或者类,这就和Java C#中关于面向对象中类的操作比较相似了。
3.模块包将功能相关的模块放在一个文件夹下,通过import 模块包名.模块名 导入。
文件夹名.文件名
建立maths文件夹,新建一个__init__.py的空文件,告诉python这是一个模块包
建立uitls.py文件,添加求平方和 求1~n个数字之和的函数如下:
#!/usr/bin/env python#coding=UTF-8#求两个数的n次方之和defsquare_sum(a,b):
c= a**a + b**breturna,b,c#求1~n的和defsum(n):
c= n*(n+1)/2returnc
在home目录下建立test_01.py 如下
#!/usr/bin/env pythonimportmaths.utils as functionprintfunction.square_sum(1,2)printfunction.sum(100)