2018-03-13

作者: 果轰桃 | 来源:发表于2018-03-13 22:32 被阅读0次

    文件与异常

    读取与写入

    python可以读取打开文件并读取其内容
    如下面代码

    while True:
        filename = r'C:\Users\42582\Desktop\pcc-master\Users_language.txt'
        User_language = input('please tell me your favourate LANGUAGE: \n')
        if User_language == 'break':
            break
        with open(filename,'a') as file_object:
            file_object.write(User_language + '\n')
        #存入受访者最喜欢的语言
    
        with open(filename) as  file_object_read:
            lines = file_object_read.readlines()
            for line in lines:
                print(line.rstrip())
        #打印所有已存在语言
    
    • 使用with可以在你不需要继续访问文件时将它关闭。在这里我们调用了open()但是并没有调用close();当然我们亦可以这么用,但是如果程序出现bug时,会可能导致close()没有执行,文件将不会被关闭,可能导致文件丢失。
    • open可以打开文件,括号中只填写文件地址,则文件只能读取,不能进行写入操作。open(filename,'r')读取模式'w'写入模式(写入并覆盖以前内容),'a'附加模式(写入并加入以前内容之后)、'r+'为*读取和写入模式
    • 文件使用open()后,使用as对文件对象命名f_obj,对f_obj进行read()之后才能对文件内容进行处理,逐行读取时,使用readlines()方法
    • 文件读取每完成一次,会自动在最后加上一个换行符,使用rstrip()可以去掉
    • windows环境下,会出现转义问题,需要在文件地址前加一个r

    异常

    Python文件出现异常时,会出现traceback代码块,包含异常报告,显示出你的程序中文件的名称,看到你不能运行的代码,对一个攻击者来说可以判断出需要对你的代码的攻击方式

    def open_and_read(filename):
        """打开文件并逐行打印文件内容"""
        try:
            with open(filename) as f_obj:
                lines = f_obj.readlines()
                for line in lines:
                    article = line.rstrip()
        except FileNotFoundError:
    #    print('illegal file location')
            pass
        else:
            print(article)
    f_names = ['C:\\Users\\42582\\Desktop\\pcc-master\\cats.txt','C:\\Users\\42582\\Desktop\\pcc-master\\dogs.txt']
    for f_name in f_names:
        open_and_read(f_name)
    
    • 将文件地址组成列表,可以用循环让同一个函数读取不同的文件
    • try-escept-else可以让程序先试图运行try中的代码块,当出现except中描述的错误时,运行except中的代码块。若try中成功运行,则跳过except中代码块。继续运行else
    • except其后可以不写错误类型,则try任何错时都会运行except中的代码
    • 要让代码出现失败时一声不吭,则只用在except后的代码块运行pass

    使用json存储数据

    使用import json导入json,通过 XXX.json 文件存储数据

    import json
    def get_users_name():
        '''尝试获取文件中的用户名'''
        filename = r'C:\Users\42582\Desktop\pcc-master\pcc-master\chapter_10\remember_me.txt'
        try:
            with open(filename) as file_object:
                user_name = json.load(file_object)
        except:
            return None
        else:
            return user_name
    
    def get_new_username():
        '''创建新的用户名'''
        filename = r'C:\Users\42582\Desktop\pcc-master\pcc-master\chapter_10\remember_me.txt'
        user_name = input('please tell me your name:  ')
        with open(filename, 'w') as file_object:
            json.dump(user_name, file_object)
        return user_name
    
    def greet_users(): 
        '''判断是否存在用户名且用户名相同,不存在或不相同则创建新的用户'''
        user_name = get_users_name()
        now_username = input('tell me your name and I will check')
        if user_name and now_username == user_name:
            print('Welcome back ' + user_name)
        else:
            user_name = get_new_username()
            print('I will remember you ' + user_name)
    
    greet_users()
    
    • json.dump(content, file_object)可以将内容(content),存储到文件中(file_object)
    • content = json.load(file_object)可以将文件读取出来,并存储到代码中(content)
    • 代码需要重构,其重构的目的是编写出易于维护且容易拓展的代码

    相关文章

      网友评论

        本文标题:2018-03-13

        本文链接:https://www.haomeiwen.com/subject/byztqftx.html