文件拷贝功能 | 学习笔记

简介: 快速学习 文件拷贝功能

开发者学堂课程【Python入门 2020年版文件拷贝功能】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10401


文件拷贝功能


内容介绍:

一、复制文件操作代码思路

二、仅能复制文本文件问题


一、复制文件操作代码思路

1.复制文件代码大体框架

文件拷贝:你输入一个文件的路径,有这么一个文件 file_name = input('请输入一个文件路径:'),系统会将文件复制一份。

比方你提供 sss.txt 文件,系统给你复制成 sss.bak.txt 文件# sss.txt ==> sss.bak.txt

文件复制:就是把文件的东西读出来再写到另一个文件里。

1)打开旧文件

old_file = open(file_name , encoding=" utf8 ')

#老文件以 open(file_name , encoding=" utf8 ')方式打开

new_file_name = 'test.txt'

#将新文件命名为“test.txt

new_file = open(new_file_name 'w' ,encoding='utf8')

#打开一个新文件用于写入

2)把旧文件的数据读取出来写入到新的文件

new_file.write(old_file.read( ))

#写出从旧文件中读取的内容

new_file.close()

old_file.close()

3)运行代码

请输入一个文件路径:sss.txt

结果:

image.png

以上代码是复制文件的大体框架,可以看出代码仍然有很多问题。

2.复制文件的不存在的问题

当你输入一个文件名,文件它不存在系统就会崩。需要在代码中添加一个判断,判断文件是否存在,下面按要求修改:

import os

file_name = input('请输入一个文件路径: ')

# sss.txt ==> sss.bak.txt

if os.path.isfile(file_name ) :

#判断是否是文件

#打开旧文件

old_file = open(file_name , encoding=" utf8 ')

new_file_name = 'test.txt'

new_file = open(new_file_name 'w' ,encoding='utf8')

# 打开一个新文件用于写入

new_file.write(old_file.read( ))

#把旧文件的数据读取出来写入到新的文件

new_file.close()

old_file.close()

else:

print('您输入的文件不存在')

若判断文件不存在,会直接打印“您输入的文件不存在”,若判断文件存在,则会复制一份文件。

3.复制文件名重复的问题

每一次复制的文件名都是test.txt,并且覆盖了之前复制的文件。下面按要求修改(不同的文件要设置不同的备份):

1)方法一

import os

file_name = input('请输入一个文件路径: ')

# sss.txt ==> sss.bak.txt

if os.path.isfile(file_name ) :

#判断是否是存在的文件

#打开旧文件

old_file = open(file_name , encoding=" utf8 ')

# 需要系统根据你每次的文件名字对应的生成另一个名字,复制文件的原理为 sss.txt ==> sss.bak .txt

# 生成的文件规律:'sss' + 'bak ' + 'txt'

names = file_name.rpartition( ' . ')

#将原有的文件名分成( 'sss ' , ' . ' , 'txt ' )

new_fiLe_name = names[0]+ '.bak .' + names[2]

#新的名字命名方式是提取原有文件分割后的第0个(表示前面的名字),第2个(后缀名)数据,中间用“.bak.”分隔。

new_file_name = 'test.txt'

new_file = open(new_file_name 'w' ,encoding='utf8')

# 打开一个新文件用于写入

#把旧文件的数据读取出来写入到新的文件

new_file.write(old_file.read( ))

new_file.close()

old_file.close()

else:

print('您输入的文件不存在')

2)方法二

import os

file_name = input('请输入一个文件路径: ')

# sss.txt ==> sss.bak.txt

if os.path.isfile(file_name ) :

#判断是否是文件

old_file = open(file_name , encoding=" utf8 ')

#打开旧文件

names = os.path.splitext(file_name)

#将原有的文件名分成( 'sss ' , ' . txt ' ),前面是“sss”文件名,后面是点加后缀名

print( names)

new_fiLe_name = names[0] + '.bak ' + names[1]

#复制文件的原理为 sss.txt ==> sss.bak .txt,新的名字命名方式是提取原有文件分割后的第0个(表示前面的名字),第1个(后缀名)数据,中间用“.bak”分隔。

names = os.path.spitext(file_name)

new_file = open(new_file_name 'w' ,encoding='utf8')

# 打开一个新文件用于写入

new_file.write(old_file.read( ))

#把旧文件的数据读取出来写入到新的文件

new_file.close()

old_file.close()

else:

print('您输入的文件不存在')

从文件名的最后一个点切开,例如文件名为

2020.2.27.11.32.error.txt,文件名切成

2020.2.27.11.32.error”和“.txt( 2020.2.27.11.32.erro' , '.txt ')

Bak 表示备份,文件名加上bak表示这是一份备份文件,对原来的文件进行了拷贝、复制。


二、文件拷贝的优化

1.能复制文本文件的问题

复制图片文件时会发生错误,虽然可以复制该文件,但是复制后的文件的格式是不对的。

图片文件是二进制,它不是一个文本,图片文件不是文本不会被读。故复制文件时要以二进制的读法读取将要被复制的文件,不能说做一个代码判断(若是二进制文件就以二进制来读,若是文本文件就以文本形式来读),因为文件的后缀名与文件格式是没有相关性的,文本可以以二进制的形式来读,所以可以直接用二进制读所有的文件,下面按要求修改(以二进制的读法读取将要被复制的文件,并且用二进制写):

file_name = input('请输入一个文件路径:')

if os.path.isfile(file_name) :

old_file = open(file_name'rb')

#以二进制的形式读取文件,读取的文件也是以二进制的形式呈现,不需要将二进制翻译成文本,可以直接用二进制写入新文件。

names = os.path.splitext(file_name)

new_file_name = names[0] + '.bak' + names[1]

new_file = open(new_file_name"wb')

#以二进制的形式写入文件

将原文件中的每一个文字以二进制的形式读取存入,再以二进制的形式写入,若需要查看复制的二进制文件时,可以用 utf-8转换成文本形式。

2.复制大文件时加载慢的问题

如果复制的文件比较大,读取的时候会全部被读出,加载会比较的慢,所以加入下面的死循环,每次都不会全部读完,只读1024个字节读完就会写入,再重复读取。

while True:

content = old_file.read(1024)

#读取出来的内容是二进制,每次就读文件的1024个字节,读完立马开始写入,再读文件的下一个1024个字节,继续写入重复以上操作。

new_file.write(content)

if not content:

break

new_file.close()

old file.close()

else:

print('您输入的文件不存在')

相关文章
|
7月前
|
Linux
Linux命令:`cp` - 复制文件与目录的利器
`cp`是Linux中的命令行工具,用于复制文件和目录。基本语法是`cp [选项] 源 目标`。常用选项包括:`-r`(递归复制目录)、`-i`(交互式确认覆盖)、`-u`(只复制更新的文件)、`-v`(详细输出)、`-p`(保留文件属性)、`-l`(创建硬链接)和`-s`(创建符号链接)。`--backup`选项可在覆盖前创建备份,`--sparse`处理稀疏文件。通过组合使用这些选项,用户可以灵活地管理文件和目录的复制操作。
45 # 实现文件拷贝功能
45 # 实现文件拷贝功能
57 0
|
安全 Linux Shell
[Linux命令]九个常用的对文件处理的Linux 命令(文件查找、文件打包上传和下载、文件权限设置)
[Linux命令]九个常用的对文件处理的Linux 命令(文件查找、文件打包上传和下载、文件权限设置)
|
前端开发
前端学习笔记202305学习笔记第二十四天-创建文件目录
前端学习笔记202305学习笔记第二十四天-创建文件目录
77 0
|
缓存 Windows
FastCopy--几乎是Windows平台最快的文件拷贝、删除软件
Windows系统中,因为默认缓存太小又无法修改,在多线程处理时也容易出现协同作业不完美的情况,很容易出现速度瓶颈,所以有时候我们复制大文件的时候,速度会很慢
695 0
|
Ubuntu 关系型数据库 MySQL
Linux 常用命令(前言、文件管理、文件编辑、备份压缩)大全(一)
Linux 常用命令(前言、文件管理、文件编辑、备份压缩)大全(一)
503 0
Linux 常用命令(前言、文件管理、文件编辑、备份压缩)大全(一)
|
JavaScript Windows
XRename(文件文件夹超级重命名工具)简介
XRename(文件文件夹超级重命名工具)简介
188 0
XRename(文件文件夹超级重命名工具)简介
|
架构师 开发者
目录和导语|学习笔记
快速学习目录和导语。
109 0
文件拷贝功能java实现
文件拷贝功能java实现
111 0
|
Linux Shell 开发者
文件目录命令 | 学习笔记
快速学习文件目录命令。
108 0