day 8

一、文件处理之控制文件内指针的移动

 f.seek
# 文件内指针移动,只有t模式下的read(n),n代表的字符的个数
# 除此以外文件内指针的移动都是以字节为单位
# with open('a.txt',mode='rt',encoding='utf-8') as f:
#     msg=f.read(1)
#     print(msg)

# with open('a.txt',mode='rb') as f:
#     msg=f.read(3)
#     print(msg.decode('utf-8'))


# f.seek(offset,whence)有两个参数:
# offset: 代表控制指针移动的字节数
# whence: 代表参照什么位置进行移动
#        whence = 0: 参照文件开头(默认的),特殊???,可以在t和b模式下使用
#        whence = 1: 参照当前所在的位置,必须在b模式下用
#        whence = 2: 参照文件末尾,必须在b模式下用

# with open('a.txt',mode='rt',encoding='utf-8') as f:
#     f.seek(6,0)
#     msg=f.read(1)
#     print(msg)

# with open('a.txt',mode='rb') as f:
#     f.seek(3,0)
#     msg=f.read(3)
#     print(msg.decode('utf-8'))

# with open('a.txt',mode='rb') as f:
#     msg=f.read(3)
#     # print(msg.decode('utf-8'))
#     print(f.tell())
#     # f.seek(6,0)
#     f.seek(3,1)
#     msg1=f.read(3)
#     print(msg1.decode('utf-8'))


# with open('a.txt',mode='rb') as f:
#     msg=f.read(3)
#     # print(msg.decode('utf-8'))
#     print(f.tell())
#     # f.seek(6,0)
#     f.seek(3,1)
#     msg1=f.read(3)
#     print(msg1.decode('utf-8'))


# with open('a.txt',mode='rb') as f:
#     # f.seek(0,2)
#     # print(f.tell())
#     f.seek(-3,2)
#     msg=f.read(3)
#     print(msg.decode('utf-8'))



# with open('access.log',mode='rb') as f:
#     f.seek(0,2) # 当前位置是147bytes
#
#     while True:
#         line=f.readline() # 当前位置是196bytes
#         # print(f.tell())
#         if len(line) == 0:
#             # 没有新的一行内容追加进来
#             pass
#         else:
#             # 有新的一行内容追加进来
#             print(line.decode('utf-8'),end='')


# with open('access.log',mode='rb') as f:
#     f.seek(0,2) # 当前位置是147bytes
#
#     while True:
#         line=f.readline() # 当前位置是196bytes
#         if len(line) != 0:
#             print(line.decode('utf-8'),end='')

with open('a.txt',mode='r+t',encoding='utf-8') as f:
    f.truncate(6)

二、文件修改的两种方式

# 修改文件的方式一:
# 1 将文件内容由硬盘全部读入内存
# 2 在内存中完成修改
# 3 将内存中修改后的结果覆盖写回硬盘
# 优点: 在文件修改的过程中硬盘上始终一份数据
# 缺点: 占用内存过多,不适用于大文件


# with open('d.txt',mode='rt',encoding='utf-8') as f:
#     all_data=f.read()
# with open('d.txt',mode='wt',encoding='utf-8') as f:
#     f.write(all_data.replace('alex','dsb'))


# 修改文件的方式二:
# 1 以读的方式打开源文件,以写的方式打开一个临时文件
# 2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕
# 3 删掉源文件,将临时文件重命名为源文件名
# 方式二:
# 优点: 同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存
# 缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,

# import os
# with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f:
#     for line in read_f:
#         write_f.write(line.replace('alex','dsb'))
# os.remove('d.txt')
# os.rename('.d.txt.swap','d.txt')

三、函数的基本使用

1 什么是函数
    函数就是具备某一功能的工具


2 为什么要用函数
    1  程序的组织结构不清晰,可读性差
    2  代码冗余
    3  可扩展性差

3 如何用函数
    函数的使用必须遵循的原则:先定义,后调用
        修理工事先准备工具的过程即函数的定义
        修理工遇到应用场景拿来工具就用即函数的调用

    语法:
        def 函数名(参数1,参数2,...):
            """
            文档注释
            """
            code1
            code2
            code3
            ......
            return 返回值

        def:定义函数的关键字
        函数名: 就相当于一个变量名,指向函数的内存地址,
                注意:函数的内存地址()就可以出发函数体代码的执行

        参数: 参数是函数的调用者为函数体代码传值的媒介,在python中函数的参数无需声明类型
        """文档注释""" : 推荐写上
        代码块:就是函数体功能的具体实现
        return 返回值 :函数体代码块运行的成果


    函数的使用分为两个阶段:
        定义阶段: 只检测语法,不执行代码
        调用阶段:运行函数体代码
            def foo():
                xxx
                print(
'''
# 先定义
# def foo():
#     print("from foo")

# 后调用
# print(foo)
# foo() # 定义时无参,意味着调用时也无需传入参数

# 先定义
# def bar(x,y):
#     print(x)
#     print(y)
# 后调用
# bar('a',2) ## 定义时无参,意味着调用时也必须传入参数


# 定义无参函数:当函数体的代码逻辑不依赖任何传入的值就能执行,就不需要定义参数
# def print_msg():
#     print('='*50)
#     print('welecome.....'.center(50,' '))
#     print('='*50)
#
# print_msg()
# print_msg()



#定义有参函数:当函数体的代码逻辑依赖于外部调用者传入的值才能执行,必须定义参数用来接收外部传入的值
# def max2(x,y):
#     # x=1
#     # y=3
#     if x > y:
#         print(x)
#     else:
#         print(y)
# max2(1,4)


# def max2(x,y):
#     if x > y:
#         return x
#     else:
#         return y
# res=max2(1,4)
# print(res)


# def foo():
#     print('from foo')
#     bar()
# foo()

# def bar():
#     print('from bar')
#
# def foo():
#     print('from foo')
#     bar()
# foo()


# # 定义阶段
# def foo():
#     print('from foo')
#     bar()
#
# def bar():
#     print('from bar')
#
# # 调用阶段
# foo()


# 定义阶段
def foo():
    print('from foo')
    bar()

# 调用阶段
foo()

def bar():
    print('from bar')
原文地址:https://www.cnblogs.com/jxl123/p/9378616.html