可以说,我有一个包含10k文件的源文件夹,我想将1k文件复制到另一个文件夹。尝试了以下方法,它可以工作,但是,有什么方法可以更有效地做到这一点?
sourceFiles = os.listdir("/source/")
destination = "/destination/"
for file in sourceFiles[0 : 1000]:
shutil.copy(file, destination)
这就是我的感觉,我正在将10k个文件加载到列表变量中,并遍历列表中的每个元素1k次,将不需要的数据加载到RAM中,这对我来说并不好。有没有更好的方法可以做到这一点?
答案 0 :(得分:1)
如果您使用的是Python 3,则pathlib.Path.iterdir
是更好的选择:
from pathlib import Path
source = Path('/source')
target = Path('/destination')
counter = 0
for obj in source.iterdir():
if obj.is_file():
obj.rename(target / obj.name)
counter += 1
if counter > 1000:
break
它使用生成器,语法更简洁,恕我直言。
在内存效率上也更好。看:
Python 3.7.5 (default, Dec 15 2019, 17:54:26)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import getsizeof
>>> from os import listdir
>>> from pathlib import Path
>>> files = listdir('/usr/bin')
>>> usrbin = Path('/usr/bin')
>>> getsizeof(files)
26744
>>> getsizeof(usrbin.iterdir())
128
>>>