场景:我有一个包含多个文件名的字符串列表。我正在尝试创建一个仅包含每个名称的一部分的新列表,或者将原始列表编辑为仅包含我想要的部分。例如:
原始列表第一项:
"iteration5_test1_part1.txt"
想要的结果:
"iteration5"
(基本上我只想保留第一个下划线之前的内容)
虽然我读到这里How to modify list entries during for loop?编辑列表不是一个好习惯,我不知道还有其他方法可以做到这一点,所以我正在尝试:
mypath = "/DGMS/Destop/uploaded"
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
for f in onlyfiles:
f = f.split("_")
f = f[0]
但不幸的是,这并没有以想要的方式更改列表。
问题:我做错了什么?
请您参考如下方法:
for 循环将名称 f 绑定(bind)到列表中的各个字符串,然后您的循环体只是重新绑定(bind)名称。这根本不会影响列表,它只是将名称绑定(bind)到您创建的新字符串,然后在进入下一个循环迭代之前丢弃它。我推荐阅读 this article by Ned Batchelder更深入地解释 Python 名称和赋值的工作原理。
最简单的解决方案是改用列表推导式:
onlyfiles = [name.split("_")[0] for name in onlyfiles]
