Python:复制、移动文件到指定文件夹

令平子 2024-07-28 15:05:02 阅读 79

需要考虑的问题:

指定文件夹是否存在,不存在则创建在指定文件夹中是否存在同名文件,是覆盖还是另存为

<code>import os

import shutil

import traceback

def copyfile(srcfile, dstpath, replace=False):

"""复制文件到指定文件夹

@param srcfile: 原文件绝对路径

@param dstpath: 目标文件夹

@param replace: 如果目标文件夹已存在同名文件,是否覆盖

"""

try:

if not os.path.isfile(srcfile):

print("%s not exist!" % (srcfile))

else:

fpath, fname = os.path.split(srcfile) # 分离文件名和路径

suffix = os.path.splitext(srcfile)[-1]

# print(fpath, fname, suffix)

if not os.path.exists(dstpath):

os.makedirs(dstpath) # 创建路径

if replace:

dstfile = os.path.join(dstpath, fname)

shutil.copy(srcfile, dstfile) # 复制文件

print("copy %s -> %s" % (srcfile, dstfile))

else:

i = 1

while True:

add = ' (%s)' % str(i) if i != 1 else ''

dstfile = os.path.join(dstpath, fname.replace(suffix, add + suffix))

if os.path.exists(dstfile) and i <= 10:

i += 1

else:

shutil.copy(srcfile, dstfile) # 复制文件

print("copy %s -> %s" % (srcfile, dstfile))

break

return dstfile

except Exception as e:

print('文件复制失败', srcfile)

traceback.print_exc()

import os

import shutil

import traceback

def movefile(srcfile, dstpath, replace=False):

"""移动文件到指定文件夹

@param srcfile: 原文件绝对路径

@param dstpath: 目标文件夹

@param replace: 如果目标文件夹已存在同名文件,是否覆盖

"""

try:

if not os.path.isfile(srcfile):

print("%s not exist!" % (srcfile))

else:

fpath, fname = os.path.split(srcfile) # 分离文件名和路径

suffix = os.path.splitext(srcfile)[-1]

# print(fpath, fname, suffix)

if not os.path.exists(dstpath):

os.makedirs(dstpath) # 创建路径

if replace:

dstfile = os.path.join(dstpath, fname)

shutil.move(srcfile, dstfile) # 复制文件

print("move %s -> %s" % (srcfile, dstfile))

else:

i = 1

while True:

add = ' (%s)' % str(i) if i != 1 else ''

dstfile = os.path.join(dstpath, fname.replace(suffix, add + suffix))

if os.path.exists(dstfile) and i <= 10:

i += 1

else:

shutil.move(srcfile, dstfile) # 复制文件

print("move %s -> %s" % (srcfile, dstfile))

break

except Exception as e:

print('文件移动失败', srcfile)

traceback.print_exc()

复制文件到指定文件夹V2:

判断源文件是否存在判断目标文件夹是否存在判断是否已存在该文件判断已存在文件是否打开判断是否需要替换掉已存在文件

注意:复制文件会改变时间属性(创建日期、修改日期),不再是源文件的时间属性

import os

import shutil

import traceback

def copyfile(srcfile, dstpath, replace=False):

"""复制文件到指定文件夹

@param srcfile: 原文件绝对路径

@param dstpath: 目标文件夹

@param replace: 如果目标文件夹已存在同名文件,是否覆盖

"""

try:

# 判断源文件是否存在

assert os.path.isfile(srcfile), "源文件不存在"

basename = os.path.basename(srcfile)

fname = os.path.splitext(basename)[0] # 不带后缀的文件名

suffix = os.path.splitext(srcfile)[-1]

# 判断目标文件夹是否存在

if not os.path.exists(dstpath):

os.makedirs(dstpath) # 创建文件夹,可递归创建文件夹,可能创建失败

# 判断目标文件夹是否存在

assert os.path.exists(dstpath), "目标文件夹不存在"

# 开始尝试复制文件到目标文件夹

i = 0

while True:

i += 1

add = '(%s)' % str(i) if i != 1 else ''

dstfile = os.path.join(dstpath, fname + add + suffix)

opened_dstfile = os.path.join(dstpath, '~$' + fname + add + suffix) # 已打开文件

# 判断目标文件夹是否存在该文件

if not os.path.exists(dstfile):

shutil.copy(srcfile, dstfile) # 不存在则复制文件

break

# 存在该文件,则判断已存在文件是否打开

if os.path.exists(opened_dstfile):

# 已打开则创建下一个新文件

continue

# 已存在文件没有打开的情况

if replace:

shutil.copy(srcfile, dstfile) # 复制文件

break

# 不覆盖已存在文件,则创建下一个新文件

return dstfile

except AssertionError as e:

print('文件复制失败', e, srcfile)

except Exception as e:

print('文件复制失败', e, srcfile)

if __name__ == "__main__":

srcfile = r"C:\Users\Administrator\Desktop\源文件夹\test.txt"

dir = r"C:\Users\Administrator\Desktop\目标文件夹"

print(copyfile(srcfile, dir, replace=True))

Python复制文件到指定文件夹,遇到相同文件名的处理

https://www.cnblogs.com/johnthegreat/p/12748790.html

python复制、移动文件到指定文件夹_python移动文件到指定文件夹-CSDN博客

文件侠告诉你,Python复制文件的N种姿势! - 云+社区 - 腾讯云



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。