基于以下假设
glob
是瓶颈,那么在编辑列表过滤是新的瓶颈,这里有一个命题:
-
移动
glob
跳出循环,只做一次
-
如果有的话,只进行一次列表筛选
-
不要将内容存储在临时变量中
datafiles = glob.glob("raw_data/*.txt")
userfiles = {} # Dictionary of "user: [file list]"
# Prepare the file list
for file in datafiles:
user = file.split('.')[-2].split('_')[-1]
ufiles = userfiles.get(user, default=[])
ufiles.append(file)
userfiles[user] = ufiles
# Loop over the list
for user, ufiles in userfiles.items():
with open("docs/{}.txt".format(user), "w") as outfile:
for infile in ufiles:
outfile.write(infile.read())
你甚至可以根本不过滤每个用户的文件,只在任意顺序的文件上循环
datafiles
这意味着要打开
outfile
处于追加模式(
a
),这样原始内容就不会被用户的每个新文件覆盖。