打开文件:
file_obj =file("文件路径","模式")
打开文件的模式有如下几种:
-
r,以只读方式打开文件
-
w,打开一个文件只用于写入。如果该文件已经存在则会将其覆盖,即将文件以前内容用新写进去的内容覆盖掉以前的内容;如果该文件不存在,则会创建新文件
-
a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
-
w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
归纳总结模式如下:
模式 | 描述 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
obj.read、obj.readlines、obj.xreadlines()区别:
log.txt内容如下:
[root@Python day001]# cat log.txt
alex:1234:1
eric:1234:2
tony:1234:3
测试Python脚本login.py代码如下:
[root@Python day001]# cat login.py
#!/usr/bin/env python
# -*- coding:utf8 -*-
count = 0
fd_obj = file("/server/scripts/day001/log.txt",'r')
info_list = fd_obj.readlines()
print info_list;
读取文件的内容:
#一次性加载所有的内容到内存
obj.read()
info_list = fd_obj.read()
print info_list;
[root@Python day001]# python login.py
alex:1234:1
eric:1234:2
tony:1234:3
[root@Python day001]#
#一次性加载所有的内容到,并根据行分割成字符串
obj.readlines()
fd_obj = file("/server/scripts/day001/log.txt",'r')
info_list = fd_obj.readlines()
print info_list;
[root@Python day001]# python login.py
['alex:1234:1\n', 'eric:1234:2\n', 'tony:1234:3\n']
#每次仅仅读取一行数据
for line in obj:
print line
#每次循环,只读一行,避免全部读入内存
fd_obj = file("/server/scripts/day001/log.txt",'r')
info_list = fd_obj.readlines()
for ele in info_list:
print ele
[root@Python day001]# python login.py
alex:1234:1
eric:1234:2
tony:1234:3
#for循环修改列表中的元素
[root@Python day001]#
name_info =['alex;1234;1', 'eric;1234;2', 'tony;1234;3']
count = 3
newInfo = []
for info in name_info:
tempLst = info.split(';')
tempLst[2] = str(count)
newInfo.append(tempLst)
print newInfo
输出结果:
[['alex', '1234', '3'], ['eric', '1234', '3'], ['tony', '1234', '3']]
写文件的内容:
obj.write('内容') #---->把内存中的数据写到文件里面
obj.writeline('内容') #---->一行一行的将数据写入到文件里
关闭文件句柄:
obj.close()
示例代码:
见附件Python开发示例代码001:
作业:
作业一:博客
将学习的内容记录到博客上
作业二:编写登录接口
要求:
输入用户名密码
认证成功显示欢迎信息
输错三次后锁定
作业三:多级菜单
三级菜单
可依次选择进入各子菜单
所需知识:列表、字典
作业二:登陆接口
#!/usr/bin/env python
# -*- coding:utf8 -*-
import getpass
userInfo_dict={}
#定义一个空字典
fd_obj =file('/server/scripts/day001/log.txt','r')
#以只读的模式打开文件log.txt
user_list = fd_obj.readlines()
#将打开的文件一行一样的读取到内存中
fd_obj.close()
#关闭打开的文件
for user in user_list:
#遍历列表user_list
userInfo = user.split(';')
#以分号";"分割列表中的元素
userInfo_dict[userInfo[0]] = {'pwd':userInfo[1],'times':int(userInfo[2].strip())}
#设置字典userInfo[0]键的值为{'pwd':userInfo[1],'times':int(userInfo[2].strip())}
while True:
username = raw_input("请输入用户名:")
if username not in userInfo_dict.keys():
#判断输入的用户名是否在字典的keys中
print "用户名不存在"
continue
else:
#如果在字典的keys中则进行下面的登陆次数判断
if userInfo_dict[username]['times'] > 3:
#如果登陆次数大于3在输出该用户被冻结,跳出while循环
print "该账户被冻结,请联系管理员"
break
else:
#如果登陆次数小于三次,则进行密码匹配判断
passwd = getpass.getpass("请输入正确的密码:")
if passwd in userInfo_dict[username]['pwd']:
#密码匹配成功,则输入登陆成功信息
userInfo_dict[username]['times'] = 0
print "%s 登陆成功" %(username)
break
else:
#否则将登陆次数自加1
userInfo_dict[username]['times'] +=1
print userInfo_dict[username]['times']
tmp_list = []
#定义一个空列表
for k,v in userInfo_dict.items():
#遍历字典的键值对然后以为分号的形式赋值给temp字符串
temp = "%s;%s;%d" % (k, v['pwd'], v['times'])
#将temp字符串追加到定义的空列表tmp_list中
tmp_list.append(temp)
#将tmp_list中的元素以换行符"\n"连接成字符串
tmp_str = '\n'.join(tmp_list)
#以写的方式的文件log.txt
fw_obj =file('/server/scripts/day001/log.txt','w')
#将字符串tmp_str写入到文件log.txt,并刷新内存中的数据到硬盘
fw_obj.write(tmp_str)
fw_obj.flush()
fw_obj.close()
[root@Python day001]# cat log.txt
tony;1234;0
alex;1234;0
eric;1234;0
[root@Python day001]#
本文转自027ryan 51CTO博客,原文链接:http://blog.51cto.com/ucode/1710848,如需转载请自行联系原作者