首页 > 解决方案 > 在循环中定义名称时移动文件

问题描述

我有一个奇怪的问题。我正在尝试将文件从位置 A 移动到位置 B。当我硬编码“Store_num”的名称时,它可以正常工作。当我从文本文件中给它一个文件名时,它会出错。

对我来说,这个错误看起来像是格式被弄乱了,但我不确定为什么或在哪里。

提前感谢您的帮助!

text.txt 中的值 = 4444

root = r"\\1.1.1.1\\ftproot"
rto = r"\\1.1.1.1\\ftproot\\AudioFiles\\HoursFiles"
Original_fName = input ("File Name: ")
Store_num = ""

def buildfile(root, rto, Original_fName, Store_num):
    copyfile (root + "\\" + Original_fName, rto + "\\" + Store_num + ".au")


with open('Test.txt') as f:
   for line in f:
       Store_num = line
       buildfile(root, rto, Original_fName, Store_num)
       if 'str' in line:
          break

错误:

File Name: test.au
Traceback (most recent call last):
  File ".\AAEasyButton.py", line 152, in <module>
    buildfile(root, rto, Original_fName, Store_num)
  File ".\AAEasyButton.py", line 136, in buildfile
    copyfile (root + "\\" + Original_fName, rto + "\\" + Store_num + ".au")
  File "C:\Program Files (x86)\Python36-32\lib\shutil.py", line 121, in copyfile
    with open(dst, 'wb') as fdst:
OSError: [Errno 22] Invalid argument: '\\\\1.1.1.1\\\\ftproot\\\\AudioFiles\\\\HoursFiles\\4444\n.au'

标签: pythonpython-3.x

解决方案


请注意错误消息中的文件名:4444\n.au. 在“.au”扩展名之前有一个换行符,并且换行符在 Windows 文件名中是非法的。

那是因为当您读取文件时,您忘记rstrip了读取行并且换行符出现在文件名中(逐行迭代文件总是在末尾添加行终止符):

for line in f:
   Store_num = line.rstrip()

另外:您在文件路径中使用原始前缀,这没关系,但您不必将斜杠加倍(开头的 UNC 前缀除外)。这就是为什么路径的表示有时有4 个反斜杠的原因。

干净的方法是:

rto = r"\\1.1.1.1\ftproot\AudioFiles\HoursFiles"

(您需要在服务器名称/地址之前使用 2 个反斜杠:它没有转义,它是 UNC :)

然后使用os.path.join

copyfile (os.path.join(root,Original_fName), os.path.join(rto,Store_num + ".au"))

推荐阅读