文件操作

【1】基本流程

(1)文件操作

  • 操作

    • 打开读文件内容 r
    with open('01.txt', 'r', encoding='utf-8') as f:
    data = f.read()
    print(data)
    • 打开写文件内容 w
    # 普通语句
    f = open('01.txt', 'w', encoding='utf-8')
    f.write('my hobby is music')
    f.close() # with语句
    with open('01.txt', 'w', encoding='utf-8') as f:
    f.write('fuck my life')
    • 追加 a
    with open('01.txt', 'a', encoding='utf-8') as f:
    f.write('\n' + 'life\'s a struggle') # fuck my life
    life's a struggle

【2】控制文件读写格式

  • 大前提:

    • tb模式不能单独使用,必须和r/w/a之一结合使用
  • t(默认的):文本模式

    • 读写文件都是以字符串为单位的
    • 只能针对文本文件
    • 必须指定encoding参数
  • b:二进制模式

    • 读写文件都是以bytes/二进制为单位的
    • 可以针对所有文件
    • 一定不能指定encoding参数

(1)t模式的使用

  • 文本类型,读内容和写内容都是字符串格式

    • wt
    with open('01.txt','wt',encoding='utf-8') as f:
    f.write('fuck my life')
    • rt
    with open('01.txt', 'rt', encoding='utf-8') as f:
    data = f.read()
    print(data, type(data)) # hello <class 'str'>
    • at
    with open('01.txt', 'at', encoding='utf-8') as f:
    f.write('world') # helloworld

(2)b模式的使用

  • 二进制模式,读内容和写进去的内容必须都是二进制格式

    • wb
    import requests
    
    response = requests.get('https://pics1.baidu.com/feed/5bafa40f4bfbfbeda5be3a2d00f9c33baec31f96.jpeg@f_auto?token=45ef4b460b6c5929ae74318d4fd239d1')
    data = response.content
    with open('douyu.png','wb') as f:
    f.write(data)

  • rb
with open('01.jpg','rb') as f:
data= f.read()
print(data)

(3)文件拷贝小练习

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

【3】文件操作的详细用法

(1)read相关

  • readline()只读文本内的一行
with open('01.txt', 'r', encoding='utf-8') as f:
data = f.readline()
print(data)

  • for循环读取
with open('01.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line) # helloworld
#20010425
  • readlines()将文件中的每一行内容读出来,读出来以后放到一个列表中
with open('01.txt', 'r', encoding='utf-8') as f:
data = f.readlines()
print(data) # ['helloworld\n', '20010425']

(2)write相关

  • 写的三种操作
  • write:一次性全部写入
with open('02.txt', 'w', encoding='utf-8') as f:
f.write('fuck my life')
  • writelines写的内容可以是一个可迭代的列表
  • 弊端:每个字符全部首尾拼接,无法自主的添加\n
with open('02.txt', 'w', encoding='utf-8') as f:
f.writelines(['heart', 'god']) # heartgod
  • a模式下的writelines,不会覆盖写,而是首尾拼接
with open('02.txt', 'a', encoding='utf-8') as f:
f.writelines(['heart', 'god']) # heartgod

【4】生成式

(1)列表生成式

num_list = [i for i in range(0, 10)]
print(num_list) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print([i for i in range(0, 10)])
  • 相乘
test_list1 = [1, 2, 3]
test_list2 = [2, 4, 6]
print([x * y for x in test_list1 for y in test_list2]) # [2, 4, 6, 4, 8, 12, 6, 12, 18]
test_list1 = [1, 2, 3]
test_list2 = [2, 4, 6]
list_four = [x * y for x, y in zip(test_list1, test_list2)]
print(list_four) # [2, 8, 18]

(2)字典生成式

dict_one = {}
for key in range(3):
for value in range(2):
dict_one[key] = value
print(dict_one) # {0: 1, 1: 1, 2: 1} my_dict = {key: value for key in range(3) for value in range(2)}
print(my_dict) # {0: 1, 1: 1, 2: 1}

深浅拷贝

  • 如果是浅copy,只会复制一层,如果copy的对象中有可变数据类型,修改可变数据类型还会影响拷贝的对象
# 原对象
original_list = [1, 2, [3, 4]]
# 使用浅拷贝创建拷贝对象
copied_list = copy.copy(original_list) # 修改原对象中的可变数据类型
original_list[2].append(5) print("原对象:", original_list) # 原对象: [1, 2, [3, 4, 5]]
print("拷贝对象:", copied_list) # 拷贝对象: [1, 2, [3, 4, 5]]
  • 如果是深copy,完整复制,无论可变或不可变,都是创建出新的来,以后再改原对象,都不会对copy出的对象造成影响
import copy

# 原对象
original_list = [1, 2, [3, 4]]
# 使用深拷贝创建拷贝对象
copied_list = copy.deepcopy(original_list) # 修改原对象中的可变数据类型
original_list[2].append(5) print("原对象:", original_list)
print("拷贝对象:", copied_list)

(1)总结

  • 浅拷贝只复制顶层对象
  • 而深拷贝会递归复制整个对象结构。

异常处理

  • 捕捉异常可以使用try/except语句。

    • try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
    • 如果你不想在异常发生时结束你的程序,只需在try里捕获它。

(1)普通语法

try:
# 正常可能会触发异常的代码
except ExceptionType as e:
# 触发异常后执行的代码
try:
name = "heart"
name[0] = 'h'
except Exception as e:
print(f"触发异常 :>>>> {e}")
# 触发异常 :>>>> 'str' object does not support item assignment

(2)异常分支语法

try:
# 正常的操作
...
except:
# 发生异常,执行这块代码
...
else:
# 如果没有异常执行这块代码
...
try:
# 正常的操作
age = int(input('请输入你的年龄:>>>'))
except ValueError:
# 发生异常,执行这块代码
print('Invalid input! Please enter a valid integer.')
...
else:
# 如果没有异常执行这块代码
print(f"Your age: {age}")
...

(3)无论是否发生异常都将执行最后的代码

  • finally块中的代码无论是否发生异常都将被执行,常用于资源的释放、清理等操作。
try:
# 正常执行的代码
...
except:
# 发生异常,执行这块代码
finally:
#退出try时总会执行
...
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
finally:
print("Finally block is executed")

文件操作&深浅拷贝&异常处理的更多相关文章

  1. python基础之数据类型操作补充,集合及其操作,深浅拷贝

    内容概要: 数据类型操作补充 集合及其操作 深浅拷贝1.基础数据类型补充 1.1字符串的操作补充li = ["李嘉诚", "麻花藤", "黄海峰&qu ...

  2. Windows提高_1.3文件操作

    文件操作 不带句柄的文件操作 // 1. 拷贝文件,第三个参数为 FALSE 表示会覆盖 // CopyFile(L"D:\\1.txt", L"E:\\2.txt&qu ...

  3. oldboy s21day07(深浅拷贝及文件操作)

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.看代码写结果'''v1 = [1, 2, 3, 4, 5]v2 = [v1, v1, v1]v1.app ...

  4. python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作

    目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...

  5. Learn day3 深浅拷贝/格式化/字符串/列表/字典/集合/文件操作

    1. pass break continue # ### pass break continue # (1) pass 过 """如果代码块当中,什么也不写,用pass来 ...

  6. day03深浅拷贝、文件操作和函数初识

    一.赋值.浅拷贝与深拷贝 直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法, ...

  7. python基础之 编码进阶,文件操作和深浅copy

    1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码.即先将其他编码的字符串解码(decode)成unicode,再从unic ...

  8. python基础 (编码进阶,文件操作和深浅copy)

    1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码. 即先将其他编码的字符串解码(decode)成unicode,再从uni ...

  9. python基础知识-7-内存、深浅、文件操作

    python其他知识目录 1.一些对内存深入理解的案例 以下列举列表,列表/字典/集合这些可变类型都是一样的原理 变量是个地址,指向存储数据的内存空间的地址,它的实质就相当于c语言里的指针.变量和数据 ...

  10. 12 hdfs常用文件、目录拷贝操作、删除操作

    package com.da.hbase.tool.utils; import com.da.hbase.tool.common.Const; import org.apache.hadoop.con ...

随机推荐

  1. Delphi 判断字符是否是汉字

    function IsHZ(ch: WideChar): boolean; var i: Integer; begin i := Ord(ch); if (i < 19968) or (i &g ...

  2. PKI(Public Key Infrastructure,公钥基础设施)常见标准介绍

    ASN.1 - 数据结构描述语言 文件编码格式 DER编码格式 PEM编码格式 证书.密码学Key格式标准 X.509标准 PKCS(公钥加密标准)系列(PKCS#1.PKCS#8.PKCS#12) ...

  3. TCP延迟调优之PSH参数与passt延迟问题修复

    qemu中使用passt来作为虚拟机的网卡NAT实现,希望能够利用它IP地址与host一致的优点.这本来是没有啥问题的,但是不知道为什么它的TCP入口流量的延迟很严重. 好吧,反正以后总是要改pass ...

  4. 用 .NET NativeAOT 构建完全 distroless 的静态链接应用

    前言 .NET NativeAOT 想必不少开发者都已经很熟悉了,它可以将 .NET 程序集直接编译到原生的机器代码,从而可以脱离 VM 直接运行.简单的一句 dotnet publish -c Re ...

  5. il热更新(一)

    转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...

  6. 🎀dubbo QOS介绍及命令

    简介 在Dubbo中,QoS(Quality of Service)功能是一个非常重要的特性,用于提供对运行时服务的查询和控制能力. QoS的概念源自网络设备中的服务质量保障机制,但在Dubbo中,它 ...

  7. 🎀Mybatis-Plus中的MetaObjectHandler

    简介 MetaObjectHandler 是一个非常有用的组件,用于处理实体对象中的字段填充逻辑,比如自动填充创建时间.更新时间.创建人.修改人等字段. 组件介绍 MetaObjectHandler ...

  8. Tryhackme部分翻译学习

    Tryhackme部分翻译学习 1.Weaponization WSH 上传txt到桌面 Set shell = WScript.CreateObject("Wscript.Shell&qu ...

  9. MCP应用docker部署,docker-compose部署

    一.概述 前面几篇文章,MCP应用直接用的python3 server.py运行的,如果服务器重启,进程就会关掉,很不方便. 所以需要使用docker部署,实现开机自启动. 二.docker部署 my ...

  10. 【代码】Android|判断asserts下的文件存在与否,以及普通文件存在与否

    作者版本:Android 11及以上 主要是发现网上没有完整的.能跑的代码,不知道怎么回事,GPT给我重写的.我只能保证这个代码尊嘟能跑,不像其他的缺胳膊少腿的. asserts 贴一下结果: boo ...