python - 在循环中定义名称时移动文件
问题描述
我有一个奇怪的问题。我正在尝试将文件从位置 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'
解决方案
请注意错误消息中的文件名: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"))
推荐阅读
- reactjs - 在没有 MDX 的 Markdown 中插入一个 React 组件
- azure - 无法 RDP 到 Azure 中 Service Fabric 群集的虚拟机规模集实例
- python - 如何删除最后一个数字后的多余空格
- python - 无法在 Windows 7 的 Jupyter Notebook 中创建新笔记本
- python - 如何将 int 的值与元组列表中的同一组组合?
- java - 在 Swift 中创建随机像素图像
- google-cloud-platform - 允许从 GCR 拉取容器的 Google Cloud 角色
- java - 单
如何在 REST 调用中获得失败或成功响应 - html - 如何将两个字符串与字母间距对齐
- python - 字符串的python验证