Python复制或移动名称位于文本文件列表中的文件

Python复制或移动名称位于文本文件列表中的文件,python,shutil,Python,Shutil,谁能告诉我如何将一批文件复制或移动到另一个目录或其他目录。文件名位于文本文件中的列表中。我在Windows系统上工作。文本文件包含类似以下内容的列表: C:\dir1\dir3\dir4\file1.pdf C:\dir5\dir6\file2.txt c:\dir7\dir8\dir9\dir10\file3.pdf …更多文件名 我尝试了readline()来读取文件列表,并尝试了shutil.move(src,dest)来移动文件,但不知道如何正确地传递src文件,而不会出现错误。如果您

谁能告诉我如何将一批文件复制或移动到另一个目录或其他目录。文件名位于文本文件中的列表中。我在Windows系统上工作。文本文件包含类似以下内容的列表:

C:\dir1\dir3\dir4\file1.pdf
C:\dir5\dir6\file2.txt
c:\dir7\dir8\dir9\dir10\file3.pdf
…更多文件名

我尝试了readline()来读取文件列表,并尝试了shutil.move(src,dest)来移动文件,但不知道如何正确地传递src文件,而不会出现错误。如果您有这样或那样的建议,我们将不胜感激?谢谢

我使用只有一个条目的文件列表进行了测试: (filetest.txt): C:\Documents and Settings\Owner\My Documents\movetest.txt

import shutil

# shutil.move(r'C:\Documents and Settings\Owner\My Documents\test4.txt', r'C:\Documents and Settings\Owner\My Documents\Test\test4.txt')

filein = open('filetest.txt', 'r')
line = filein.readline()
name = 'r' + "'" + line[:len(line) - 1] + "'"
shutil.move(name, 'movetest.txt')
filein.close()`

Traceback:

Traceback (most recent call last):
  File "C:\Python33\Lib\shutil.py", line 522, in move
    os.rename(src, real_dst)
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: 'movetest.txt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Documents and Settings/Owner/My Documents/Python 3 Programs/MoveTest10.py", line 12, in <module>
    shutil.move(name, 'movetest.txt')
  File "C:\Python33\Lib\shutil.py", line 534, in move
    copy2(src, real_dst)
  File "C:\Python33\Lib\shutil.py", line 243, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Python33\Lib\shutil.py", line 109, in copyfile
    with open(src, 'rb') as fsrc:
OSError: [Errno 22] Invalid argument: "r'C:\\Documents and Settings\\Owner\\My Documents\\movetest.txt'"
导入shutil
#move(r'C:\Documents and Settings\Owner\My Documents\test4.txt',r'C:\Documents and Settings\Owner\My Documents\Test\test4.txt')
filein=open('filetest.txt','r')
line=filein.readline()
名称='r'+'“+行[:len(行)-1]+'”
move(名称“movetest.txt”)
filein.close()`
回溯:
回溯(最近一次呼叫最后一次):
文件“C:\Python33\Lib\shutil.py”,第522行,移动中
重命名(src,realdst)
OSError:[WinError 123]文件名、目录名或卷标语法不正确:“movetest.txt”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:/Documents and Settings/Owner/My Documents/Python 3 Programs/MoveTest10.py”,第12行,在
move(名称“movetest.txt”)
文件“C:\Python33\Lib\shutil.py”,第534行,移动中
副本2(src、real_dst)
文件“C:\Python33\Lib\shutil.py”,第243行,在copy2中
复制文件(src、dst、follow_symlinks=follow_symlinks)
copyfile中第109行的文件“C:\Python33\Lib\shutil.py”
开放式(src,'rb')作为fsrc:
OSError:[Errno 22]无效参数:“r'C:\\Documents and Settings\\Owner\\My Documents\\movetest.txt”

您需要避开反斜杠,以便python了解您的路径: 而不是:

C:\dir1\dir3\dir4\file1.pdf
使用:

读取文件时,您可以执行以下操作:

for line in file:
    line = line.replace('\\', '\\\\')
例如:

In [5]: path='c:\\dir\\file'

In [6]: path.replace('\\','\\\\')
Out[6]: 'c:\\\\dir\\\\file'
您必须将
r“c:\test”
放在python程序中,因为这是python中表示文字
c:\test
的方式。当在文件中读取它们时,每个字符都代表它自己 那就


应该可以工作

您会遇到什么错误,我们可以看到您的尝试吗?您的方法是正确的,请提供您尝试的解决方案并进行回溯。
import shutil\shutil.move(r'C:\Documents and Settings\Owner\My Documents\test4.txt',r'C:\Documents and Settings\Owner\My Documents\Test\test4.txt')filein=open('filetest.txt',r'line=filein.readline()name='r'+'“+line[:len(line)-1]+'”shutil.move(name,'movetest.txt')filein.close()
感谢您的回复,但我不知道如何实现这是我的脚本。包含要移动的文件列表的文件的格式如下所示:c:\dir1\dir2\dir3\filename.txt。我理解字母“r”,但似乎不知道如何在我的特定脚本中实现它。谢谢。我已经完成了脚本,应该可以移动一个文件。谢谢你的回复。我的文件列表的格式为普通(对于windows)单反斜杠。列表中有成千上万的条目。我必须编写一个脚本,用双反斜杠替换所有反斜杠。这可能不太难做到,但如果可能的话,我希望能够按原样使用列表。谢谢,再次谢谢。这很好也很简单。最后一件事,似乎我必须为dst提供一个文件名。由于列表中有很多文件,每个文件都有不同的名称,有没有一种简单的方法可以告诉shutil.move()自动为dst使用与scr相同的文件名?这只是一个移动,而不是重命名和移动。谢谢,我刚找到答案。我使用了os.path.split()方法。再次感谢你的帮助。
In [5]: path='c:\\dir\\file'

In [6]: path.replace('\\','\\\\')
Out[6]: 'c:\\\\dir\\\\file'
import shutil

filein = open('filetest.txt', 'r')
line = filein.readline()
name = line[:len(line) - 1]
shutil.move(name, 'movetest.txt')
filein.close()`