我有以下代码:
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只返回大约一半的文件名。我已手动检查其中一些isfile返回False表示存在。在读入所有数据时,转义字符或单个反斜杠不应该有任何问题,所以我有点难过。有任何想法吗?下面是csv文件格式的示例,以及isfile无法找到的某些pathname
的示例。
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
感谢。
答案 0 :(得分:0)
您可以放心地假设os.path.isfile()
正常工作。以下是调试此类问题的过程:
print(pathname)
。cmd
返回 dir
空格 "
+粘贴到新命令提示符+ {{ 1}} 返回 编辑 Windows上的路径很复杂。例如,一个重要的细节就是“。”是一个非常非常特殊的角色。名称“a.something very long”在命令提示符中无效,因为它要求在最后一个“。”后面有最多三个字符。在文件名中!你很幸运,它不要求之前的名称是at most 8 characters。
结论:对于Windows上的文件名和路径中的“奇怪字符”,您必须非常非常小心。唯一安全的字符是listed in this document。