你能帮我弄清楚如何基于多个/一组数字作为分隔符进行拆分吗?
我在以下格式的文件中有内容:
data_file_10572_2018-02-15-12-57-29.file
header_file_13238_2018-02-15-12-57-48.file
sig_file1_17678_2018-02-15-12-57-14.file
预期产出:
data_file
header_file
sig_file1
我是python的新手,我不确定如何基于数字组切割。谢谢你的回复!!
答案 0 :(得分:1)
我希望这会对你有所帮助。 Method查找可以转换为整数的元素,并将字符串返回到此值。
data = ['data_file_10572_2018-02-15-12-57-29.file', 'header_file_13238_2018-02-15-12-57-48.file', 'sig_file1_17678_2018-02-15-12-57-14.file']
def split_before_int(elem):
filename = elem.split('_')
for part in filename:
if not isinstance(part, (int)):
return '_'.join(filename[:filename.index(part)-2])
for elem in data:
print(split_before_int(elem))
输出:
data_file
header_file
sig_file1
答案 1 :(得分:0)
首先index
获取_
符号的第二个位置,然后python列表部分索引(即list[0:5]
)以获得第二个{{1}位置的子字符串}}
答案 2 :(得分:0)
files = ['data_file_10572_2018-02-15-12-57-29.file', 'header_file_13238_2018-02-15-12-57-48.file','sig_file1_17678_2018-02-15-12-57-14.file']
cleaned_files = list(map(lambda file: '_'.join(file.split('_')[0:2]), files))
这导致:
['data_file', 'header_file', 'sig_file1']
答案 3 :(得分:0)
您可以使用" _"用正则表达式然后加入除最后一个
之外的元素<强>实施例强>
import re
a = "data_file_10572_2018-02-15-12-57-29.file"
print "_".join(re.match("(.*?)_\d",a).group().split("_")[:-1])
<强>输出:强>
data_file
答案 4 :(得分:0)
如果所有文件名都遵循您描述的模式,则此代码将起作用。
filename = 'data_file_10572_2018-02-15-12-57-29.file'
parts = filename.split('_')
new_filename = '_'.join(parts[:2])
如果文件名的字母部分具有可变数量的下划线,则使用Regex会更好。
import re
pattern = re.compile('_[0-9_-]{3,}.file$')
re.sub(pattern, '', filename)
输出:
data_file
基本上,首先,它创建一个以_开头的模式,后跟3个或更多数字,_或 - 并以.file结尾。 然后使用空字符串替换此模式后面的字符串的最大子字符串。