更新:重要 好吧,所以我一直担心文件名的长度已经有一段时间了,因为我知道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)
答案 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主题 重要的是要了解我也在使用基于服务器的共享,因此我需要文件路径“\\”完整。