编辑字符串列表中的项目

时间:2018-07-09 09:16:16

标签: python list

方案::我有一个包含多个文件名的字符串列表。我试图用每个名称的一部分创建一个新列表,或者编辑原始列表以仅包含我想要的部分。例如:

列表的第一项:

"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]

但是不幸的是,这并没有以想要的方式更改列表。

问题:我在做什么错了?

6 个答案:

答案 0 :(得分:3)

for循环将名称f绑定到列表中的各个字符串,然后循环主体简单地重新绑定了该名称。这根本不会影响列表,它只是将名称绑定到您创建的新字符串,然后在进入下一个循环迭代之前将其丢弃。我建议阅读this article by Ned Batchelder,以获得有关Python名称和分配如何工作的更深入的说明。

最简单的解决方案是改为使用列表理解:

onlyfiles = [name.split("_")[0] for name in onlyfiles]

答案 1 :(得分:2)

Python中的字符串是不可变的,这意味着它们不能就地修改。

您将不得不将修改后的字符串重新分配给列表。

L = ["iteration5_test1_part1.txt"]

for index, item in enumerate(L):
    L[index] = item.split('_')[0]

print(L) # ['iteration5']

或作为列表理解:

L = [item.split('_')[0] for item in L]

答案 2 :(得分:1)

mypath = "/DGMS/Destop/uploaded"

from os import listdir
from os.path import isfile, join

onlyfiles = [f.split("_")[0] for f in listdir(mypath) if isfile(join(mypath, f))]    

答案 3 :(得分:1)

也许

for i in range(len(onlyfiles)):
    temp = onlyfiles[i].split("_")[0]
    onlyfiles[i]=temp

会有所帮助。

答案 4 :(得分:1)

使用分隔符分割字符串很简单。

>>> [s.split('_')[0] for s in l]

#driver值:

IN : l = ["iteration5_test1_part1.txt", "hello_world", "abc_"]
OUT : ['iteration5', 'hello', 'abc']

答案 5 :(得分:1)

您可以执行此操作以创建新列表

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))]
new_list = []
for f in onlyfiles:
    f = f.split("_")
    new_list.append(f[0])