【问题标题】:python copy files by wildcardspython通过通配符复制文件
【发布时间】:2013-08-24 16:07:05
【问题描述】:

我正在学习 python (python 3),我可以将 1 个文件复制到新目录 通过这样做

import shutil 
shutil.copyfile('C:/test/test.txt', 'C:/lol/test.txt')

我现在要做的是将所有 *.txt 文件从 C:/ 复制到 C:/test

*.txt 是一个通配符,用于搜索我硬盘上的所有文本文件

【问题讨论】:

    标签: python file copy glob shutil


    【解决方案1】:

    使用glob.glob() 获取匹配文件名的列表,然后遍历该列表。

    【讨论】:

    • 该死的早了 2 秒 :D
    • import shutil, glob dest_dir = "C:\\" for f in glob.glob("*.dat"): shutil.copy(f, dest_dir)
    • 为了更有用,这个答案应该解释如何使用它。
    【解决方案2】:
    import glob
    import shutil
    dest_dir = "C:/test"
    for file in glob.glob(r'C:/*.txt'):
        print(file)
        shutil.copy(file, dest_dir)
    

    【讨论】:

    • glob.glob(r 中的 r 是什么?
    • 我也问同样的问题...例如,我在官方文档 (docs.pytahon.org/3.5/library/glob.html) 上没有找到与此 r 相关的任何信息。此外,我尝试使用没有参数的解决方案,似乎没有任何改变。某glob大师:请澄清这个疑问。无论如何:很好的答案:)。
    • 我找到了答案@ivanleoncz。 r 在 python 中的字符串之前使用以覆盖转义序列(即 \n 将被视为 \n 而不是新行)。在答案中,使用 r 没有任何区别,因为没有转义序列,但如果文件分隔符是 \ 而不是 /,那么会注意到影响。换句话说,r 与 glob 无关。它是python中可以在字符串之前使用的前缀
    • 在python中称为原始字符串:) docs.python.org/2.0/ref/strings.html
    【解决方案3】:

    我首先使用 python 2.7 测试以确保它可以工作。 我使用通配符 * 因为我将日期添加到所有文本文件中。文件名1_2016_04_18.txt 此外,一些文本文件具有附加到文本文件的不同最终用户。文件名2_username.txt

    import os, glob
    
    directorypath = 'C:\\Program Files\\Common Files'
    os.chdir(directorypath)
    
    files = ['filename1', 'filename2', 'filename3']
    print ('A %(files)s'% vars())
    for filename in files:
        file1 = filename + "*" + "." + "txt"; print ('1 %(file1)s'% vars())
        file2 = ('%(file1)s') % vars (); print ('2 %(file2)s'% vars())
        file3=glob.glob(file2); print ('3 %(file3)s'% vars())
        for filename4 in file3:
            try:
                if os.path.isfile(filename4):
                        print ('I am deleteing this file %(filename4)s'% vars())
                        os.remove(filename4)
                else:    ## Show an error ##
                        print("Error can not delete text file : %s because file not found" % filename4)
            except OSError, e:  ## if failed, report it back to the user ##
                    print ("Error: %s - %s." % (e.filename,e.strerror))
    

    【讨论】:

    • 通过检查名称为 glob.glob 刚刚返回的文件是否确实存在,您正在使它......线程安全? (你不是。)
    • 变量file2file1有什么区别?
    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 2012-05-03
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多