簡體   English   中英

同一行代碼中有多個拆分?

[英]Multiple splits in the same line of code?

我正在嘗試將其轉換為: /bcs/lgnp/clientapp/csvbill/audit_process/inwork_20150921141500/LGNP.SMR.CSV0000.BILL.INPUT01.kb01^^.20150921140115.xml

為此: kb01^^.20150921140115

目前,我正在通過以下操作實現這一目標:

cur_file = '/bcs/lgnp/clientapp/csvbill/audit_process/inwork_20150921141500/LGNP.SMR.CSV0000.BILL.INPUT01.kb01^^.20150921140115.xml'
file_path = cur_file.split('/')
file_name = file_path[-1].split('.')
project_code = file_name[5] + '.' + file_name[6]

可以一步完成嗎?

像這樣的'.'.join(cur_file.split('.')[-3:-1])嗎?

是。

您的代碼在一行上:

project_code = '.'join(curr_file.split('/')[-1].split('.')[-3:-1])

因為split()函數返回一個字符串列表,所以您可以立即使用string.split()[n]地址,后者只是另一個字符串,因此可以應用string.split()[].split()[]直到到達想要的位置。

這就是上面所做的。 最后一個[-3:-1]僅從末尾開始索引,以始終刪除.xml

'.'.join()是一種將句點放回去的方法,同時也使結果成為單個字符串。

由於沒有理由split('/')當你要split('.')后,你可以將它縮短為:

project_code = '.'join(curr_file.split('.')[-3:-1])

祝您好運,編碼愉快!

路徑拆分也可以使用os.path完成( os.path.basename(cur_file)返回路徑的文件名部分):

import os.path

cur_file = '/bcs/lgnp/clientapp/csvbill/audit_process/inwork_20150921141500/' +\
           'LGNP.SMR.CSV0000.BILL.INPUT01.kb01^^.20150921140115.xml'

print '.'.join(os.path.basename(cur_file).split('.')[5:7])
s="/bcs/lgnp/clientapp/csvbill/audit_process/inwork_20150921141500/LGNP.SMR.CSV0000.BILL.INPUT01.kb01^^.20150921140115.xml"

print(s.split(".",5)[-1].rsplit(".",1)[0])

如果您知道總是從末尾刪除4個字符:

print(s.split(".",5)[-1][:-4])

要么:

print(".".join(s.rsplit(".",3)[1:-1]))

或使用str.format並解壓縮:

print("{}.{}".format(*s.rsplit(".", 3)[1:]))

如果任何字符串都不符合您發布的格式,則此答案和所有其他答案很可能會失敗。

我將向您介紹正則表達式的強大功能,但是請不要擔心,它們在這里可以提供幫助。

在沒有其他路徑的先驗知識的情況下,我們可以假設項目代碼是路徑的最后一位,它由兩個點之間的任意字符串以及一個點與擴展名之間的一系列數字組成,因此捕獲此信息的正則表達式為:

import re
exp = re.compile(ur'.+\.(.+\.\d+).xml')

然后,您可以使用該編譯后的正則表達式在一行中的字符串中找到匹配的標記:

project_name = re.findall(exp, cur_file)[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM