这是我的代码
shutil.move('D:\folder1\2016000000242300_65500000007016_11_2.png','D:\folder2\discarded')
运行此代码时,我看到以下错误:
FileNotFoundError:[错误2]没有此类文件或目录:'D:\ folder1 \ x816000000242300_65500000007016_11_2.png'
在folder1\
之后看到x8很奇怪。当我在folder1
之后再使用一个反斜杠时,它将起作用。我不明白是什么原因造成的,以及如何解决。我使用os.path.join()创建完整路径。
这是我的方法:
def clean_Data(inputDir, outDir)
pathnamein = os.path.join(inputDir, fname)
pathnameout = os.path.join(outDir, fname)
shutil.move(pathnamein, pathnameout)
答案 0 :(得分:1)
在Python字符串文字中,反斜杠称为转义字符,因为它“转义”以下一个或多个字符,赋予它们特殊的含义,或从中去除特殊的含义。
特别地,\nnn
是一种通过其ASCII码插入字符的方式,其中nnn
是一个八进制数字。有相关的格式,例如\xnn
,其中nn
是十六进制的。在您的情况下,\201
等效于\x81
,等效于十进制位置129的ASCII字符。
\\
是另一个转义序列,其中转义字符会自行转义,剥去它的特殊意义。这是在字符串中包含实际反斜杠的方法。当您说“ ... \ 2016 ...” , Python sees "character #129, then a six"; when you say "...\\2016..."
时,Python会看到“反斜杠,两个,零,一个,六个”。
答案 1 :(得分:0)
@Amadan对造成问题的原因完全正确。
建议您使用pathlib库来包装路径,而不是手动插入反斜杠,因为您使用的是Python 3。
import shutil
from pathlib import PureWindowsPath
src = PureWindowsPath('D:\folder1\2016000000242300_65500000007016_11_2.png')
dst = PureWindowsPath('D:\folder2\discarded')
shutil.move(src, dst)
或者,根据您的评论,您可以做
src = PureWindowsPath(inputDir) / PureWindowsPath(fname)
dst = PureWindowsPath(outDir) / PureWindowsPath(fname)
shutil.move(src, dst)
更多独立于平台的解决方案可能是
from pathlib import Path
src = Path(inputDir) / Path(fname)
dst = Path(outDir) / Path(fname)
shutil.move(src, dst)
通过这种方式,库会自动推断出文件系统所需的特定于操作系统的详细信息,并相应地调整斜杠。