编辑列表以删除定义的变量以及字符之后和包括字符的所有内容
Edit a list to remove a defined variable and everything after and including a character
我有以下设置:
variable = /XXX/XXX/XXX/
list = [/XXX/XXX/XXX/INFO_RANDOM_STRING_HERE.file, etc...]
我想复制列表,但 trim 起始变量,以及 "INFO" 段以外的所有内容(即 _RANDOM 之前的所有内容)。信息每次都不一样,RANDOM_STRING_HERE,但变量是常量。
我怎样才能做到这一点?
为了澄清,我有:
variable = /users/me/folder/
list = [/users/me/folder/file1_001_134543_X5_6MGFS.txt, /users/me/folder/file2_231_234233_Y5_6MGFFAS.txt, etc...]
而且我想要
完整列表和新列表:
newlist = [file1, file2, etc...]
您可以在 list comprehension
:
中使用 split()
[x.split(variable)[1].split('_')[0] for x in the_list]
查看完整代码:
variable = "/users/me/folder/"
the_list = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
print [x.split(variable)[1].split('_')[0] for x in the_list]
输出:
['file1', 'file2']
我已经准备了另一个示例(带注释)以防您不想使用 list comprehensions
而只是一个简单的 for
循环:
variable = "/users/me/folder/"
the_list = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
results_list = list()
for full_path in the_list:
_, file_name = full_path.split(variable) # This splits "/users/me/folder/file1_001_134543_X5_6MGFS.txt" into "/users/me/folder/" and "file1_001_134543_X5_6MGFS.txt" so we take the last one as 'file_name'
file_name = file_name.split('_')[0] # This splits e.g. "file1_001_134543_X5_6MGFS.txt" in ["file1", "001", "134543", "X5", "6MGFS.txt"] so we take only the first one, which is in index 0
results_list.append(file_name) # Adding e.g. "file1" to our 'results_list'
print results_list
variable = "/users/me/folder/"
lst = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
lst[:] = [s.replace(variable,"").split("_",1)[0] for s in lst]
print(lst)
输出:
['file1', 'file2']
如果您实际上只是想获取基本名称,您可以使用 os.path.basename
:
lst = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
from os import path
lst[:] = [path.basename(s).split("_",1)[0] for s in lst]
print(lst)
输出:
['file1', 'file2']
variable = "/users/me/folder/"
list = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
length = len(variable)
list = [x[length:] for x in list]
我有以下设置:
variable = /XXX/XXX/XXX/
list = [/XXX/XXX/XXX/INFO_RANDOM_STRING_HERE.file, etc...]
我想复制列表,但 trim 起始变量,以及 "INFO" 段以外的所有内容(即 _RANDOM 之前的所有内容)。信息每次都不一样,RANDOM_STRING_HERE,但变量是常量。
我怎样才能做到这一点?
为了澄清,我有:
variable = /users/me/folder/
list = [/users/me/folder/file1_001_134543_X5_6MGFS.txt, /users/me/folder/file2_231_234233_Y5_6MGFFAS.txt, etc...]
而且我想要 完整列表和新列表:
newlist = [file1, file2, etc...]
您可以在 list comprehension
:
split()
[x.split(variable)[1].split('_')[0] for x in the_list]
查看完整代码:
variable = "/users/me/folder/"
the_list = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
print [x.split(variable)[1].split('_')[0] for x in the_list]
输出:
['file1', 'file2']
我已经准备了另一个示例(带注释)以防您不想使用 list comprehensions
而只是一个简单的 for
循环:
variable = "/users/me/folder/"
the_list = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
results_list = list()
for full_path in the_list:
_, file_name = full_path.split(variable) # This splits "/users/me/folder/file1_001_134543_X5_6MGFS.txt" into "/users/me/folder/" and "file1_001_134543_X5_6MGFS.txt" so we take the last one as 'file_name'
file_name = file_name.split('_')[0] # This splits e.g. "file1_001_134543_X5_6MGFS.txt" in ["file1", "001", "134543", "X5", "6MGFS.txt"] so we take only the first one, which is in index 0
results_list.append(file_name) # Adding e.g. "file1" to our 'results_list'
print results_list
variable = "/users/me/folder/"
lst = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
lst[:] = [s.replace(variable,"").split("_",1)[0] for s in lst]
print(lst)
输出:
['file1', 'file2']
如果您实际上只是想获取基本名称,您可以使用 os.path.basename
:
lst = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
from os import path
lst[:] = [path.basename(s).split("_",1)[0] for s in lst]
print(lst)
输出:
['file1', 'file2']
variable = "/users/me/folder/"
list = ["/users/me/folder/file1_001_134543_X5_6MGFS.txt", "/users/me/folder/file2_231_234233_Y5_6MGFFAS.txt"]
length = len(variable)
list = [x[length:] for x in list]