python的新手,我想删除两个字符串的前缀。只是将所有内容都保留在J之前并删除.json。
我尝试使用[:1],但它会删除整个第一个字符串
ptr2
我要输出这个
name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']
答案 0 :(得分:1)
您可以在列表理解中使用split()
:
name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']
print([x.rsplit('-', 1)[1].split('.')[0] for x in name])
# ['J105150', 'J616293']
答案 1 :(得分:1)
您可以使用find()
函数和数组拼接。
name = ['190523-105238-J105150.json' ,'190152-105568-J616293.json']
for i in range(len(name)):
start_of_json = name[i].find('.json')
start_of_name = name[i].find('J')
name[i] = name[i][start_of_name:start_of_json]
答案 2 :(得分:0)
列表最初是name = ['190523-105238-J105150.json', '190152-105568-J616293.json']
。
List comprehensions
非常有用且功能强大。
eq = [name[i][name[i].find("J"):name[i].rfind(".json")] for i in range(len(name))]
,使用列表推导通过找到值name
的开头并转到J
,从列表before
创建新的值列表。 .json
。 find()
的结果为整数类型。
完整的代码如下。
def main():
name = ['190523-105238-J105150.json', '190152-105568-J616293.json']
eq = [name[i][name[i].find("J"):name[i].rfind(".json")] for i in range(len(name))]
print(eq)
if __name__ == "__main__":
main()
output: ['J105150', 'J616293']
答案 3 :(得分:0)
执行[:1]将对当前列表进行切片,以仅包含索引1之前的元素,因此仅存在索引0的元素。 这不是您想要的。 正则表达式可以帮助您实现目标。
import re
output = [re.search(r'-([\w+]).json', x).group(0) for x in your_list]
答案 4 :(得分:0)
以下是两种可能的方法:
一个更为冗长。另一种基本上做相同的事情,但是如果愿意的话,将其浓缩为单线。
方法1:
在方法1中,我们创建一个空列表来临时存储结果。
我们从此处解析连字符上的name
和.split()
的每个项目。
对于每个项目,这将产生一个包含三个元素的列表:例如['190523', '105238', 'J105150.json']
。
我们使用索引[-1]
仅选择最后一个元素,然后使用空白字符串.replace()
.json
文本''
有效地删除.json
。
然后,我们将该项目添加到new_names
列表中。
最后,我们覆盖了变量标签name
,使其指向我们生成的新列表。
name = ['190523-105238-J105150.json', '190152-105568-J616293.json']
new_names = []
for item in name:
item = item.split('-')[-1]
new_names.append(item.replace('.json', ''))
name = new_names
方法2:
name = ['190523-105238-J105150.json', '190152-105568-J616293.json']
name = [item.split('-')[-1].replace('.json', '') for item in name]
答案 5 :(得分:0)
首先,它不是数据帧,而是数组。
假设您具有静态结构,则可以使用下面的简单代码。
name = [x[x.index("J"):x.index(".")] for x in name]