无法在python中复制有效文件

时间:2015-09-23 04:31:59

标签: python windows file copy

更新:重要 好吧,所以我一直担心文件名的长度已经有一段时间了,因为我知道Windows有时会出现大于256个字符的文件名问题。这些似乎超过了260个字符。所以这不是代码而是限制。

我创建了一个python脚本,除了其他东西之外,还要复制一些已被跳过的文件。现在我遇到了一些障碍,其中没有复制 SOME 文件。现在这些文件在我们的共享上,往往有很长的名字。我几乎可以肯定它起了作用,因为它们长度为260个字符。有没有人有办法解决这个问题?

代码: 编辑 - 我编辑了代码以尝试@realizedvariance建议

if not file_path=="":
    if not file_path.find("~$") > 0:
        folder_name, file_name = os.path.split(file_path)
        if os.path.exists(folder_name):
            for thefile in os.listdir(folder_name): 
                if thefile.lower().rstrip().lstrip() == file_name.lower().rstrip().lstrip():
                    print thefile
                    print os.path.exists(folder_name)
                    print os.path.exists(os.path.join(folder_name, thefile))

它们失败的文件是名称为

的文件

以下是印刷品的回复:

Draft DR 129123 CP, Amendment No. 3 to AS NaZT 60335.2.11 2009 Household and similar electrical appliances - Safety – Part 2.11  .msg
True
False
DaltaPlaneR Business Information Newsletter - Issue 79, 2010 - Social Networking Apps in Business - Grail Roads Ltd.msg
True
False
From DaltaPlaneR - Business Newsletter - Issue 78 - 2009 - Important Terms of Trade - Strategic Businesses Ltd.msg
True
False

因此它打印文件名,如果文件夹位置为真,则如果完整位置为真。请记住,它确实从os.listdir(path)

获取了文件名

3 个答案:

答案 0 :(得分:1)

您确定两个列表中的文件名是完全相同的大小写和格式吗?也许尝试一个简单的改变:

for thefile.lower().rstrip().lstrip() == file_name.lower().rstrip().lstrip()

不是最优雅的,但可能需要检查。也可能存在unicode / string问题。尝试将它们包装在str()中。

答案 1 :(得分:0)

我没有能力发表评论或我愿意。

脚本的输出会有很大帮助。我认为这可能是因为空格,但我已经手动测试了您的脚本,同时指定了file_path = '/home/user/test.txt'file_path = '/home/user/test 2.txt'。你是如何设置变量的?你是用一些语法设置它,将空格解释为文件名的结尾?如果是这样,请尝试转义空格,如'\ '

答案 2 :(得分:0)

原来我说文件路径名太长了。我需要的是UNC命令从我正在进行的请求中排除 MAX_PATH

我需要将\\?\UNC作为我的file_path字符串的前缀,最终转换为\\\\?\UNC

以下是以下代码:

if not file_path=="":
        if not file_path.find("~$") > 0:
            file_path="\\\\?\UNC"+file_path
            print os.path.exists(file_path)

我发现的信息来自Naming Files, Paths, and Namespaces帖子中关于MAX_PATH的Microsoft MSDN主题 重要的是要了解我也在使用基于服务器的共享,因此我需要文件路径“\\”完整。