簡體   English   中英

字符串:提取最后一個/后的前六個字符

[英]string: extract first six characters after the last /

我對Python的字符串處理相對較新,並且在弄清楚如何解決此問題時遇到了麻煩:我沿着/dir/MAC.timestamp.bin的路線有一條絕對路徑,該路徑類似於以下內容:

for fh in glob.glob(DATA_FOLDER+"*.bin"):
    retval = database.postdata(fh)

現在,我需要提取MAC(以6個字符開頭)。 我正在考慮按照以下方式做一些事情

for fh in glob.glob("bin/*.bin"):
    list=fh.split("/")
    lstlen=len(list)
    mac=list[lstlen-1][:6]
    retval = database.postdata(mac,fh)

但是,我不確定100%是否始終都是氣密的,還有沒有更好的方法來解決這個問題? 任何提示表示贊賞!

謝謝!

您應該使用os.path.basename(p)而不是p.split('/')[-1]

例如:

>>> import os
>>> p = '/dir/MAC.timestamp.bin'
>>> p = os.path.basename(p)
>>> p
'MAC.timestamp.bin'
>>> p[:3]
'MAC'

更一般的解決方案:

>>> import os
>>> p = '/dir/MAC.timestamp.bin'
>>> p = os.path.basename(p)
>>> p.split('.')[0]
'MAC'
>>> s = "this/is/a/test23.123456789.bin"
>>> s.split( "/" )[-1][:6]
'test23'

那應該工作。

Python列表可以是帶有負數的索引。 -1是列表中的最后一個元素。

再次,如您的問題所述,如果傳入的數據不符合您的規范,則我和您的解決方案將無法滿足要求。 您將需要添加如下檢查:

>>> s = "this/is/a/test23.123456789.bin"
>>> last_part = s.split( "/" )[-1].split( "." )
>>> if len( last_part ) != 6:
...  print "Improper file format"
>>> else:
...  print "Correct: %s" % last_format

此檢查也將受益於檢查它是否不包含在您的情況下會產生無效mac字符。

os.path具有您會發現有用的功能。 特別是os.path.basenameos.path.splitext 也許試試這個:

import os.path

for fh in glob.glob("bin/*.bin"):
    filename = os.path.basename(fh)
    mac = os.path.splitext(filename)[0]
    if len(mac) != 6:
        raise(Exception('MAC %r is not six characters long' % (filename,)))

暫無
暫無

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

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