Skip to content

Latest commit

 

History

History
210 lines (142 loc) · 3.97 KB

File metadata and controls

210 lines (142 loc) · 3.97 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0443
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

拷贝程序

回忆

  • python 的成功不是偶然的
  • 新的嫩芽一定是发于陈腐的腐殖质
  • 他吸取了 ABC 好的一面
  • 也吸取了 shell 和 c 好的一面
  • 他可以很方便地操作文件
  • 其实我们也可以做一个拷贝程序?🤔

问问ai

图片描述

  • 看起来就是先读取字节序列
  • 再写入字节序列
  • 先去游乐场

建立

  • 先建立一个oeasy.txt
echo "123" > oeasy.txt
  • 再观察
cat oeasy.txt
  • 已经存在

图片描述

拷贝流程

f = open ("oeasy.txt", "rb")
b_content = f.read ()
f.close ()
f = open("o2z.txt", "wb" )
f.write(b_content)
f.close ()
  • 都选二进制的方式读写

图片描述

  • 因为这样有些不属于文本的内容
    • 也可以完成读写

系统验证

  • 原来系统没有 o2z.txt
    • 现在有了
  • 读出来确实是 oeasy.txt 里面的内容

图片描述

  • 可以动态指定源头和目标吗?

添加参数

#/usr/bin/python3
import sys
source_file = sys.argv[1]
destination_file = sys.argv[2]
f = open (source_file, "rb")
b_content = f.read ()
f.close ()
f = open(destination_file, "wb" )
f.write(b_content)
f.close ()

  • 注意 argv 里面
  • 第 0 个是当前 py 文件
  • 后面的两个是
    • from 的源文件
    • to 的目标文件
  • 换一个比较复杂的路径呢?

先观察

cat /proc/net/tcp
  • /proc/net/tcp
    • 是当前所有的 tcp 链接

图片描述

绝对路径

python3 /proc/net/tcp o3z.txt
cat o3z.txt
  • 读写都是 ok 的

图片描述

  • 可以用 input 来动态输入么?

动态输入

  • 尝试将源和目标回显

图片描述

  • 读写成功

读写大文件

  • 尝试把/usr/bin/python 拷贝到当前目录
    • 源文件是/usr/bin/python
    • 目标文件是./p
      • ./是当前目录
      • p是文件的名字
      • 取名叫 p

图片描述

  • 然后尝试运行

同时写

  • 但是如果是两个文件同时写同一个文件呢?

图片描述

  • 开两个终端
  • 分别运行
  • 会如何呢?

执行结果

  • 后执行的结果为准
  • 前面的被 truncate 了

图片描述

  • 如果修改源代码
  • 能否让某文件同时用"wb"模式被 open 两次呢?

修改源代码

图片描述

  • 第 9 行加了一句话

同时运行

图片描述

运行结果

图片描述

  • 可以同时打开
  • 显然还是把第一次拷贝的东西给覆盖掉了

备份的好处

  • 把文件写到硬盘
    • 可以让文件 迅速恢复
  • 把文件备份
    • 可以避免 因为误操作 丢失文件

图片描述

  • 如果有可能
    • 我们应该对太阳系进行备份
  • 万一有问题
    • 可以将整个太阳系恢复出来

总结

  • python 拷贝程序运行比较顺利
  • 但是两个进程同时写的同一个文件可能有问题
  • 比如两个一起写
  • 而文件又很大
  • 后面还会覆盖前面
  • 怎么办呢?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。