isfile无法识别文件python 2.5

isfile无法识别文件python 2.5,python,csv,Python,Csv,我有以下代码: with open('EcoDocs TK pdfs.csv', 'rb') as pdf_in: pdflist = csv.reader(pdf_in, quotechar='"') for row in pdflist: if row[1].endswith(row[2]):#check if file type is appended to file name pathname = ''.join(row[0:2])

我有以下代码:

with open('EcoDocs TK pdfs.csv', 'rb') as pdf_in:
    pdflist = csv.reader(pdf_in, quotechar='"')
    for row in pdflist:
        if row[1].endswith(row[2]):#check if file type is appended to file name
            pathname = ''.join(row[0:2])
        else:
            pathname = ''.join(row)
        if os.path.isfile(pathname):
            filehash = md5.md5(file(pathname).read()).hexdigest()
它从csv文件中读取文件路径、文件名和文件类型。然后在连接文件路径和文件名之前,检查文件类型是否附加到文件名。然后在处理文件之前,它会检查文件是否存在。csv文件中大约有5000个文件名,但isfile仅为其中的一半返回True。我已经手动检查了其中一些isfile是否为exist返回False。当所有的数据都被读入时,转义字符或单个反斜杠应该不会有任何问题,所以我有点困惑。有什么想法吗?下面是csv文件格式的示例,以及isfile找不到的一些
路径名的示例

csv文件-

c:\2dir\a. dir\d dir\lo dir\fu dir\wdir\5dir\,5_l B.xls,.xls
c:\2dir\a. dir\d dir\lo dir\fu dir\wdir\5dir\,5_l A.pdf,.pdf
已创建路径名-

c:\2dir\a. dir\d dir\lo dir\fu dir\wdir\5dir\5_l B.xls
c:\2dir\a. dir\d dir\lo dir\fu dir\wdir\5dir\5_l A.pdf

谢谢。

您可以放心地假设
os.path.isfile()
工作正常。以下是我调试此类问题的过程:

  • 在使用之前添加一个
    打印(路径名)
  • 目测输出。有什么可疑的吗
  • 将输出复制到剪贴板->Win+R
    cmd
    Return
    dir
    Space
    +粘贴到新命令提示符+
    Return
    这将检查路径是否真的正确(发现肉眼会忽略的微小错误)。它还有助于验证即使在Windows上也仍然强制执行的疯狂
  • 如果这也有效,那么下一步是检查文件和文件夹权限:确保运行脚本的用户实际具有查看和读取文件的权限
  • 编辑窗口上的路径是。。。复杂。例如,一个重要的细节是“.”是一个非常非常特殊的角色。名称“a.something very long”在命令提示中无效,因为它要求文件名中最后一个“.”之后最多有三个字符!幸运的是,它不要求最后一个点之前的名称是


    结论:您必须非常非常小心地处理Windows上文件名和路径中的“奇怪字符”。唯一安全的字符是。

    您确实有
    a。您的磁盘上有dir
    ?完全是这样写的吗?不,这些文件路径只是示例,因为我的真实数据是商业敏感数据。每个'dir'前面的字符都与我的数据相对应,只是为了允许对任何特殊/转义字符进行评估。感谢您的回复。这与我所遵循的调试过程几乎相同,只是我只是将输出粘贴到windows资源管理器中,这并没有任何问题。我刚刚尝试按照您的建议将其粘贴到cmd中,但出现了错误
    文件名或扩展名太长
    。我不知道文件名有一个最大长度。有没有办法克服/修改windows中的这个限制?@joel:Ah。这意味着您有一个与DOS不兼容的文件名。看看我的编辑。再次感谢你的回复,亚伦。我已经解决了文件名太长的问题,\\?'成功了。使用cmd检查文件,就像你建议的那样,当然有帮助,所以我接受了你的答案。我现在可以继续调试脚本,并将使用您在上次编辑中提供的信息。非常感谢。