我有以下代码:
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文件中大约有5000个文件名,但是isfile只对其中一半返回True。我手动检查了其中一些isfile对于exist返回False。当所有数据都被读入时,转义字符或单个反斜杠应该不会有任何问题,所以我有点困惑。有什么想法吗?下面是csv文件格式的一个示例,以及isfile找不到的pathname
的示例。在
csv文件-
^{pr2}$已创建路径名-
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()
工作正常。下面是我调试类似问题的过程:print(pathname)
。在cmd
Returndir
空格"
+粘贴到新的命令提示符+"
Return检查路径是否真的是正确的(发现眼球可能遗漏的轻微错误)。它还有助于验证疯狂的DOS naming conventions,即使在Windows上也仍然强制执行。在
编辑Windows上的路径是。。。很复杂。例如,一个重要的细节是“.”是一个非常非常特殊的字符。名称“a.something very long”在命令提示符中无效,因为它要求文件名中最后一个“.”后最多有三个字符!幸运的是,它没有要求最后一个点之前的名称是at most 8 characters。在
结论:你必须非常,非常,非常小心Windows文件名和路径中的“奇怪字符”。唯一安全的字符是listed in this document。在
相关问题 更多 >
编程相关推荐