python3 在文件确实存在的情况下,运行提示找不到文件

提示 [Errno 2] No such file or directory: 但是路径下确实存在此文件,在不改动的情况下,再次运行,执行成功。

百思不得其解,看到此链接下的回答

http://bbs.csdn.net/topics/391934998?page=1

尝试使用 os.path.normpath() 替换os.path.join(),先记录待测试。

-----------------------------------------------------------

使用了以上方法发现并没有解决问题

 

折腾半天,定位问题在open方法上。

最后得出结论:文件夹名称最后有个空格,会导致失败。问题解决!!

待贴代码。

------------------------------------------------------------------------

错误指向这句

shutil.copy(os.path.normpath('%s\%s' % (otherfilepath, file)), outdirname)

通过单步执行定位问题,出错是在shutil.copy。

下面是shutil.copy源码
 
 
 1 def copy(src, dst, *, follow_symlinks=True):
 2     """Copy data and mode bits ("cp src dst"). Return the file's destination.
 3 
 4     The destination may be a directory.
 5 
 6     If follow_symlinks is false, symlinks won't be followed. This
 7     resembles GNU's "cp -P src dst".
 8 
 9     If source and destination are the same file, a SameFileError will be
10     raised.
11 
12     """
13     if os.path.isdir(dst):
14         dst = os.path.join(dst, os.path.basename(src))
15     copyfile(src, dst, follow_symlinks=follow_symlinks)  # 定位到的出错点
16     copymode(src, dst, follow_symlinks=follow_symlinks)
17     return dst
继续查copyfile的源码:
 
 
 1 def copyfile(src, dst, *, follow_symlinks=True):
 2     """Copy data from src to dst.
 3 
 4     If follow_symlinks is not set and src is a symbolic link, a new
 5     symlink will be created instead of copying the file it points to.
 6 
 7     """
 8     if _samefile(src, dst):
 9         raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
10 
11     for fn in [src, dst]:
12         try:
13             st = os.stat(fn)
14         except OSError:
15             # File most likely does not exist
16             pass
17         else:
18             # XXX What about other special files? (sockets, devices...)
19             if stat.S_ISFIFO(st.st_mode):
20                 raise SpecialFileError("`%s` is a named pipe" % fn)
21 
22     if not follow_symlinks and os.path.islink(src):
23         os.symlink(os.readlink(src), dst)
24     else:
25         with open(src, 'rb') as fsrc:
26             with open(dst, 'wb') as fdst:  # 最终定位错误在这一句
27                 copyfileobj(fsrc, fdst)
28     return dst
 
 

    最后失败原因是open函数出错,无法打开dst文件。

根据源码,执行shutil.copy(srcfile, dstdir),
先是在dstdir文件夹创建一个与srcfile同名的文件路径os.path.join(dst, os.path.basename(src)),即为dstfile的路径。
之后执行copyfile,同时打开srcfiledstfile,把srcfile的内容复制到dstfile中。


无意中发现dst的文件夹名最后有个空格,因为dst是由前面的代码生成的,在生成的时候,文件夹名字字符串最后有个空格‘test ’,实际生成文件夹的时候会自动把最后的空格去掉,即实际文件夹名为test。
而在程序中dstdir的空格还是保留的,即在执行open的时候打开的文件名是 (‘test \\dstfile’),是寻不到文件的(实际存在的是test\\dstfile),因此把空格去掉就不报错了。

转载于:https://www.cnblogs.com/congyinew/p/7552490.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中,要导入csv文件需要使用csv模块。如果在导入csv文件时显示不存在,可能有以下几个原因: 1. 文件路径错误:在导入csv文件时,需要明确指定正确的文件路径。如果文件路径不正确,即使文件确实存在,也会导入失败。可以使用绝对路径或者相对路径来指定文件路径。相对路径是相对于当前运行程序的路径。 2. 文件名错误:确认导入时使用的文件名是正确的。如果文件名拼写错误,或者文件的扩展名不是.csv,也会导致导入失败。 3. 文件存在:确保要导入的csv文件确实存在于指定路径中。如果文件存在,无法导入。 4. 文件权限问题:如果要导入的csv文件没有读取权限,也会导致导入失败。确保所在文件夹和文件本身的权限设置正确。 5. 编码问题:如果csv文件包含非UTF-8编码的字符,可能导致导入失败。尝试使用指定编码方式来打开文件。 总结来说,要解决导入csv文件显示不存在的问题,需要确认文件路径、文件名、文件是否存在文件权限和文件编码等方面的问题,并进行相应的调整。 ### 回答2: 当导入csv文件时,可能会出现文件存在情况。有以下几个可能的原因: 1. 文件路径错误:在导入csv文件时,需要提供正确的文件路径。如果文件路径错误,Python3提示文件存在。需要确保文件路径是正确的,可以使用绝对路径或者相对路径。 2. 文件编码问题:在导入csv文件时,需要注意文件的编码方式。如果文件的编码方式与Python3不兼容,也会导致文件存在的错误。可以尝试将文件编码转换为Python3支持的编码方式,例如UTF-8。 3. 文件权限问题:在某些情况下,文件可能存在访问权限的问题,导致无法读取文件。可以通过检查文件的权限设置,确保文件对当前用户是可读的。 4. 文件名错误:在导入csv文件时,需要确保提供的文件名与实际文件名一致。如果提供的文件名与实际文件名不同,也会导致文件存在的错误。 综上所述,当Python3导入csv文件显示不存在时,需要检查文件路径、文件编码、文件权限和文件名等因素,确保导入的文件存在且可读的。如果问题仍然存在,可以尝试使用其他方法或工具导入csv文件,或者在导入之前检查文件存在性。 ### 回答3: Python3导入CSV文件显示不存在的原因可能有以下几种: 1. 文件路径错误:当导入一个CSV文件时,需要提供正确的文件路径。如果文件路径错误,Python3会显示文件存在的错误。正确的文件路径应该包括文件的目录和文件名。 例如,如果CSV文件位于当前工作目录下的data文件夹中,文件名为data.csv,那么正确的文件路径应为'./data/data.csv'。 2. 文件到:如果提供了正确的文件路径,但文件仍然显示不存在,可能是因为文件确实存在。在这种情况下,需要检查文件是否位于指定的路径下,或者是否已被移动、重命名或删除。 3. 文件编码问题:如果CSV文件使用了特殊的编码格式,而导入时未正确指定编码格式,Python3可能无法正确解析文件,导致显示文件存在的错误。在这种情况下,可以尝试指定正确的编码格式,例如utf-8或gbk。 4. 文件访问权限问题:如果CSV文件位于受限制的文件夹中,例如操作系统的系统文件夹或其他用户的私人文件夹,Python3可能无法读取该文件。要解决这个问题,可以尝试将CSV文件移动到可访问的文件夹中,或者使用管理员权限运行Python3。 总之,要解决Python3导入CSV文件显示不存在的问题,需要检查文件路径是否正确、确保文件存在并且可读,同时注意文件的编码格式是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值