所以我在网址上有一个python列表(在下面的代码段中称为lst)。
/this/is/the/first/url/file.zip
/this/is/the/second/url/file.zip
...
我想创建另一个只包含每个url的/file.zip部分的列表。到目前为止,我有这个:
lst2 = []
for i in lst:
lst2.append(i[0].split('/')][-1])
并按预期返回/file.zip部分。但我的问题是如何才能为整个清单做到这一点?
答案 0 :(得分:3)
假设lst = [url1, url2, ...]
,您当前的代码非常接近最佳工作状态。
代码lst2.append(i[0].split('/')][-1])
的最后一行是问题所在。
通过调用i[0]
,您实际上是获取i
字符串的第一个字符(因为i
派生自lst
内的字符串),然后根据它分割它在/
,这是行不通的。然后,]
之后的单独split
会出错。
因此,要修复此代码,您可以执行以下操作。
lst2 = []
for i in lst:
lst2.append(i.split('/')[-1])
然后,打印lst2
会给出
[' file.zip',' file1.zip',...]
这是您想要的输出。
要解释一下,i in lst
正在获取lst
列表中的每个项目,这些项目都是字符串。然后,在循环内部,字符串i
将根据其中的/
进行拆分,从而生成另一个数组。但是你想要该字符串的最后一部分,因此可以使用[-1]
访问数组中的最后一项。
答案 1 :(得分:0)
您可以使用列表理解:
lst2 = [url.rsplit('/', 1)[-1] for url in lst]
答案 2 :(得分:0)
您可以使用list comprehension完成此操作。
lst = [
'/this/is/the/url/file.zip',
'/this/is/the/url/file1.zip',
'/this/is/the/url/file2.zip',
'/this/is/the/url/file3.zip',
'/this/is/the/url/file4.zip',
]
lst2 = [l.split('/')[-1] for l in lst]
lst2
现在看起来像这样:
['file.zip', 'file1.zip', 'file2.zip', 'file3.zip', 'file4.zip']
答案 3 :(得分:0)
除了@Wintro回答:
你需要领先的' /'在你的结果(/file1.zip)?然后你必须再次预先发布它,因为split()
会让它消失。
我建议你使用python builtin pathlib
或os.path.basename
或os.path.split
:https://docs.python.org/3/library/pathlib.html https://docs.python.org/2/library/os.path.html#os.path.basename
此外,您可以使用循环理解:
urllst = ["url1/file1.zip", "url2/file2.zip", "..."]
filelst = ['/' + url.split('/')[-1] for url in lst]
答案 4 :(得分:0)
虽然在这种情况下可能没有必要,但为这些功能使用适当的库总是一个好主意。在这种情况下,这是os
模块:
>>> import os
>>> [os.path.basename(i) for i in lst]
['file.zip', 'file1.zip', 'file2.zip', 'file3.zip', 'file4.zip']