我遇到一个奇怪的问题。我正在尝试将文件从位置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'
答案 0 :(得分:3)
在错误消息4444\n.au
中记下文件名。在Windows文件名中,“。au”扩展名和换行符之前是一个换行符。
那是因为当您读取文件时忘记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"))
答案 1 :(得分:0)
首先,您的文件名包含'\n'
字符。这是无效的文件名。
解决此问题后,请注意所有反斜杠。代码中带有反斜杠的字符串必须转义所有反斜杠。但是,当您从文件中读取数据时,您无需再对它们进行转义。请注意错误消息中的所有反斜杠:
'\\\\1.1.1.1\\\\ftproot\\\\AudioFiles\\\\HoursFiles\\4444\n.au'
由于它显示为字符串文字,因此每个'\\'
代表一个反斜杠字符。这意味着您已经从文件中读取了以下内容:
\\1.1.1.1\\ftproot\\AudioFiles\\HoursFiles
这在您的代码中是正确的,因为必须将反斜杠转义。但是,在您读入程序的文本文件中这是不正确的。相反,请编辑文件以提供有效的路径,并在每个文件夹名称之间添加一个反斜杠。