文件的基本操作-阿里云开发者社区

开发者社区> 开发与运维> 正文

文件的基本操作

简介:

打开文件:

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,如需转载请自行联系原作者






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章