0

我有以下代码:

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 返回 False 是否存在。由于读取了所有数据,转义字符或单个反斜杠应该没有任何问题,所以我有点难过。有任何想法吗?下面是 csv 文件格式的示例,以及一些pathnameisfile 无法找到的示例。

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

谢谢。

4

1 回答 1

0

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

  1. print(pathname)在我使用它之前添加一个。
  2. 目测输出。有什么看起来可疑的吗?
  3. 将输出复制到剪贴板 -> Win+RcmdReturndirSpace"+ 粘贴到新的命令提示符 +"Return
    检查路径是否真的正确(发现目测会漏掉的轻微错误)。它还有助于验证即使在 Windows 上仍然强制执行的疯狂DOS 命名约定。
  4. 如果这也有效,下一步是检查文件和文件夹权限:确保运行脚本的用户实际上具有查看和读取文件的权限。

Windows 上的编辑路径...很复杂。例如,一个重要的细节是“.”。是一个非常非常特别的角色。名称“a.something very long”在命令提示符中无效,因为它要求您在最后一个“.”之后最多有三个字符。在文件名中!您很幸运,它不要求最后一个点之前的名称最多为 8 个字符

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

于 2013-09-25T15:03:58.097 回答