Day10
今日总结
文件内光标的移动
1.read()的使用
'''
    read()方法会移动光标,结束后光标会移动到文件末尾,使得重复打印read()只会返回一遍
    在文本模式下,read()里的数字表字符的个数,但在b模式下,则表示字节的个数
'''
with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read())
    print(f.read())
    print(f.read())
    # Hello world
    with open(r'a.txt', 'r', encoding='utf8') as f:
    print(f.read(1))  # H
    print(f.read(1))  # e
    print(f.read(1))  # l
    # 在utf8中,英文用1bytes(一个字节)表示,中文用3bytes表示
    # unicode中所有字符都是2bytes表示(unicode可以忽略)
    
2.控制光标的移动
'''
    通过seek()方法控制光标的移动
    seek()方法在t模式也只能通过字节单位来移动 
    
    seek(offset,whence)
    offset:移动的字节数
    whence:控制模式,默认是0
    0:将光标先移动到文件开头,支持文本模式和二进制模式
    1:将光标先停留在当前位置,只支持二进制模式
    2:将光标先移动到文件末尾,只支持二进制模式 
''' 
with open(r'a.txt', 'rb') as f:
    f.seek(1, 0)
    print(f.read(1).decode())  # e
    f.seek(1, 1)  # 基于e的位置移动一个字节
    print(f.read(1).decode())  # l
    print(f.tell())  #  4   tell() 获取光标基于文件开头的字节数
文件的修改
'''
	文件在硬盘上有两个状态:占有态与自由态
	删除数据本质是将原数据的位置标记为自由态,之后如果有新的数据在自由态位置会直接覆盖掉
	硬盘上的文件数据是不能够从中间添加内容的,只能移除老内容,重新刻新的
'''
修改方法1:
    # 将文件一次性存入内存,再在内存中修改后再覆盖源文件
    # 优点: 修改过程中只存一份数据
    # 缺点: 过于占用内存
    a.txt内数据为 Hello world一二三四五
    with open('a.txt', mode='r', encoding='utf-8') as f:
    data = f.read()
    with open('a.txt', mode='w', encoding='utf-8') as f:
        f.write(data.replace('一二三四五', '!'))
    with open('a.txt', mode='r', encoding='utf-8') as f:
        print(f.read())  # Hello world!
 修改方法2:
    # 以r模式打开原文件,再以写的方式打开临时文件,一行行读取原文件修改,再写入临时文件
    # 优点: 不占用内存
    # 缺点: 修改过程存了两份文件
    a.txt内数据为 Hello world!
    import os  # 模块(后面会学)
    with open('a.txt', 'r', encoding='utf-8') as read_f, \
    open('.a.txt.swap', 'w', encoding='utf-8') as wrife_f:
        for line in read_f:
            wrife_f.write(line.replace('!', '!!!'))
            os.remove('a.txt')  # 删除文件	
            os.rename('.a.txt.swap', 'a.txt')  # 重命名文件
        	# 修改后a.txt内容为Hello world!!!
:
函数简介
'''通过代码结束函数原理'''
l1 = [1, 2, 3, 4, 5, 4, 3, 2, 1]
d = {}
def my_count():
    for i in l1:
        if i not in d:
            d[i] = 1
        else:
            d[i] += 1
    print(d)
my_count()  # {1: 2, 2: 2, 3: 2, 4: 2, 5: 1}
'''上述代码就可以相当于count()函数的一点功能'''
# 函数相当于工具,定义好后就可以反复使用
# 函数:在不同的地方 反复执行相同的代码
# 循环:在相同的地方 反复执行相同的代码
函数的语法结构
def 函数名(参数1,参数2):
    '''注释'''
    函数代码
    return 返回值
def  # 定义函数的关键字
参数  # 使用函数时传递的数据,可不写
注释  # 函数的使用方法以及函数的功能
return  # 执行完函数返回的值
# 定义函数是不会执行函数体的代码,调用函数的格式是函数名()
进入新手村
:

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号