文件处理和操作

文件操作

文件操作三种方式

  • write) 模式 : write 覆盖写模式,如果你文件中有内容,直接覆盖掉写进去新的内容

  • a(append) 模式 : write 追加写模式,如果你文件中有内容,再原有内容的基础上追加内容

    with open('01.txt','a',encording='utf8') as f:
        fp.write('my name is tony'+'\n')
        fp.close()
    
  • r(read) 模式 : read 读内容模式,可以将文件中的内容读出来

控制文本读写格式

  • t 模式 : 文本类型。读内容和写内容都是字符串格式

    with open(r'01.txt','rt',encoding='utf8') as fp:
        data=fp.read()
        for line in data.split(':'):
            print(line,type(line))
    
  • b 模式 :二进制模式。读内容和写进去的内容必须都是二进制格式

文件拷贝

  • 要求:
    • 输入一个文件地址 --- 把文件内容读出来
    • 输入一个文件地址 --- 把当前文件内容拷贝到新的地址和新的文件里面
    path_start = input("原始地址:>>>>").strip()
    path_end = input("目标地址:>>>>").strip()
    modle = {1: 'wb', 2: 'rb'}
    print(f"{path_start} to {path_end} :>>>> 已开始!")
    with open(path_start, modle[2]) as read_f, open(path_end, modle[1]) as write_f:
        write_f.write(read_f.read())
        print(f"{path_start} to {path_end} :>>>> 已完成!")

读操作

  • readline :只读一行

    with open('01.txt', 'r', encoding='utf-8') as fp:
    	data = fp.readline()
    	print(data)
        for line in data:
            print(line)
    

控制文件内光标移动

  • 【1】控制读的字符个数

    with open('01.txt', mode='rt', encoding='utf-8') as f:
         data = f.read(6)  # 读取3个字符
         print(data)
    
  • 【2】seek方法

    • 以文件开头作为参照

    • 以当前我所在位置作为参照

    • 以文件末尾的位置作为参照

       with open('02.txt', 'rt', encoding='utf-8') as fp:
           # 英文占一个字节 (一个字符)
           # 中文占三个字节 (一个字符)
           fp.seek(6, 0)
           print(fp.tell())  # 6
           print(fp.read())  # 从开头开始算,移动6个字节,再从6字节这个位置向后读数据
      

    文件内容替换

    # 原来的文本内容如下
    # 张一蛋     山东    179    49    12344234523
    # 李二蛋     河北    163    57    13913453521
    # 王全蛋     山西    153    62    18651433422
    
    # 修改后的内容如下
    # 张一蛋(妇女主任)  山东    179    49    12344234523
    # 李二蛋(村长)     河北    163    57    13913453521
    # 王全蛋(书记)     山西    153    62    18651433422
    
    with open('04.txt', 'r', encoding='utf-8') as file:
    	#一行一行读取
        data = file.readlines()
    line_list = []
    for line in data:
        if '张一蛋' in line:
            line = line.replace(line.split()[0], f'{line.split()[0]}(妇女主任)')
        elif '李二蛋' in line:
            line = line.replace(line.split()[0], f'{line.split()[0]}(村长)')
        elif '王全蛋' in line:
            line = line.replace(line.split()[0], f'{line.split()[0]}(书记)')
        line_list.append(line)
    print(line_list)
    with open('04.txt', 'w', encoding='utf-8') as fp:
        fp.writelines(line_list)
    

列表生成式

  • 列表生成式: 新的列表,每个元素都去除掉了空格

    people=['张三 ','  李四','王五']
    list=[i.strip() for i in people]
    
    list=[]
    for i in people:
        list.append(i.strip())
    print(list)    
    #输出:['张三', '李四', '王五']
    
  • 列表生成式 : 遍历两个列表并取出每一个列表的元素 做乘法运算

    list_one = [x * y for x in test_1 for y in test_2]
    print(list_one)
    
  • 列表生成式 : 遍历两个列表并取出每一个列表对应索引的元素 做乘法运算

    list = [test_1[i] * test_2[i] for i in range(len(test_1))]
    print(list)
    
  • 列表生成式 : 遍历两个列表并取出每一个列表对应索引的元素 做乘法运算

    list = [x * y for x, y in zip(test_1, test_2)]
    print(list)
    
  • 字典生成式

    num_dict = {}
    for key in range(3):
        for value in range(2):
             num_dict[key] = value
    print(num_dict)
     my_dict = {key: value for key in range(3) for value in range(2)}
     print(my_dict)
    # {0: 1, 1: 1, 2: 1}
    
    tuple_list = [('name', 'hope'), ('age', 18), ('hobby', 'piano')]
    dict = {key: value for key, value in tuple_list}
    print(dict)
    
posted @ 2023-12-05 19:34  -半城烟雨  阅读(12)  评论(0编辑  收藏  举报