我正在慢慢地朝着一个脚本移动,以便在UNC路径列表之后复制文件。
import shutil
src = input("File to read lines from: ") # Using a text file with one UNC path per line
dst = input("Destination folder: ") # UNC path, with write rights
source = open(src, "r")
while True:
lineread = source.readline()
shutil.copy2(lineread, dst)
if len(lineread) == 0:
break
print(lineread, end="")
source.close()
我最终得到了错误
OSError: [Errno 22] Invalid argument: '\\\\..\\..\\..\\filename\n'
显然,这些行不能读作raw_strings。
我尝试过更改
source = open(src, "r")
到
source = open(src, 'r')
然后我得到
TypeError: invalid file: <_io.TextIOWrapper name='filename.txt' mode='r' encoding='cp1252'>
下面的脚本正确列出了这些行。
mynewhandle = open("test.txt", "r")
while True: # Keep reading forever
theline = mynewhandle.readline() # Try to read next line
if len(theline) == 0: # If there are no more lines
break # leave the loop
# Now process the line we've just read
print(theline, end="")
mynewhandle.close()
应该这么简单,我会盲目代码......
答案 0 :(得分:2)
有几件事需要改进。以下情况很好:
import shutil
src = input("File to read lines from: ") # Using a text file with one UNC path per line
dst = input("Destination folder: ") # UNC path, with write rights
打开文本文件时,我建议您习惯使用with
构造。从文本文件中读取行时,请使用for
循环。正如eryksun写的那样,返回的行包括换行符。尽可能使用描述性标识符:
with open(src) as file_with_filenames:
for fname in file_with_filenames:
fname = fname.rstrip()
shutil.copy2(fname, dst)
print(fname)
with
将为您关闭对象。考虑for
循环,关于循环遍历对象的所有元素。文本文件的元素是作为字符串的行(如果存在则包括换行符 - 不必位于最后一行)。
尝试是否适合您(使用UNC路径)。在错误消息中看到反斜杠加倍是正常的。这就是如何将bacslash表示为转义序列的方式。您可以使用普通斜杠,但我不确定UNC路径的第一部分是否也可以。