python有没有办法通过读取conf文件中的源目录和目标目录来移动windows上的文件?

python有没有办法通过读取conf文件中的源目录和目标目录来移动windows上的文件?,python,file,config,move,Python,File,Config,Move,我正在尝试自动将文件从一个windows目录移动到另一个windows目录,在配置文件中包含源目录和目标目录 如果配置文件中只有一行包含路径,我就可以让它工作了。 如果我对脚本中的路径进行硬编码,shutil命令也可以工作,但这不是我的想法。 我需要在目录列表中循环,并按源和目标运行代码 这是.conf文件中的条目: c:\\temp\O D |c:\\temp\D D 我在|上拆分了行,然后我尝试了os.path.join和os.path.normpath,但是shutil如果我在conf

我正在尝试自动将文件从一个windows目录移动到另一个windows目录,在配置文件中包含源目录和目标目录

如果配置文件中只有一行包含路径,我就可以让它工作了。 如果我对脚本中的路径进行硬编码,shutil命令也可以工作,但这不是我的想法。 我需要在目录列表中循环,并按源和目标运行代码

这是.conf文件中的条目:

c:\\temp\O D |c:\\temp\D D 
我在
|
上拆分了行,然后我尝试了
os.path.join
os.path.normpath
,但是
shutil
如果我在conf文件中添加一行,就会不断抛出双反斜杠

如果我添加另一行,它将抛出以下错误:

FileNotFoundError:[Errno 2]没有这样的文件或目录:“c:\temp\D\test1.txt”

这是到目前为止我的代码

导入shutil
导入操作系统
导入操作系统路径
导入日期时间
从pathlib导入路径
filepath=r'c:\temp\acc.conf.txt'
打开(文件路径)作为fp时:
对于cnt,枚举(fp)中的行:
打印(“行{}:{}”。格式(cnt,行))
a、 b=直线分割(“|”)
来源=路径(a)
source1=os.path.join(源)
source\u path=os.path.normpath(source1)
#打印(源路径)
印刷品(b)
dst=路径(b)
dst1=os.path.join(dst)
dest_path=os.path.normpath(dst1)
#打印(目的地路径)
os.chdir(源路径)
#打印(os.getcwd())
files=os.listdir(os.getcwd())
now=datetime.datetime.now()
run\u time=now.strftime(“%Y-%m-%d%H:%m:%S”)
对于文件中的f:
打印(运行时+“-”+f+“-”+os.getcwd()+“-”+dest\u路径)
#shutil.移动(f,目标路径)
印刷品(f)
打印(目的地路径)
shutil.移动(f,目标路径)

通过一些更改,我可以修复您的代码并使其在我的计算机上运行

  • 使用
    strip()
    删除行尾的Windows样式换行符和额外的空白。这假设目录名可能包含空格,但不会以空格结尾或开头
  • 我没有执行
    chdir
    source\u path
    ,而是就地打开它。这允许我使用相对路径而不是绝对路径,而且实际上没有必要改变dir。因此,
    source\u path
    中的文件通过
    os.path.join(source\u path,f)
    引用
  • listdir
    周围放置try/except以处理目录不存在的情况
  • 测试
    dest_dir
    是否存在并且是一个目录,以避免出现各种问题
  • 我测试了这个脚本,它在我的Windows10机器上运行,使用了从PowerShell调用的Python3.9.5。它使用一行或多行,路径可以使用
    \\
    或仅使用
    \
导入shutil
导入操作系统
导入操作系统路径
导入日期时间
从pathlib导入路径
filepath=r'c:\temp\acc.conf.txt'
打开(文件路径,“r”)作为fp:
对于cnt,枚举(fp)中的行:
打印(“行{}:{}”。格式(cnt,行))
a、 b=直线分割(“|”)
source=路径(a.strip())
source1=os.path.join(源)
source\u path=os.path.normpath(source1)
印刷品(b)
dst=路径(b)
dst1=os.path.join(dst)
dest_path=os.path.normpath(dst1)
如果不是os.path.isdir(目标路径):
打印(dest_path+“不是目录,正在跳过”)
持续
尝试:
files=os.listdir(源路径)
除FileNotFoundError为e外:
打印(e)
持续
now=datetime.datetime.now()
run\u time=now.strftime(“%Y-%m-%d%H:%m:%S”)
对于文件中的f:
打印(运行时+“-”+f+“-”+os.getcwd()+“-”+dest\u路径)
印刷品(f)
打印(目的地路径)
shutil.move(os.path.join(source\u path,f),dest\u path)

小说明:您是否允许配置中的目录包含空格?例如,您的示例配置行是否用于将文件从带有空格的
od
移动到带有空格的
dd
?编辑您的问题,并在文件内容周围加上三个反勾,就像我为您的代码所做的那样,这样我们就可以看到您为程序提供的确切输入。还有一个问题:您使用的是哪一版本的Python?非常好,谢谢您的帮助!很高兴我能帮忙!如果这解决了你的问题,请考虑接受答案。你如何接受答案?就在我的答案的左边,靠近顶部,你应该看到一个灰色的复选标记。单击它表示此答案解决了您的问题。干杯