簡體   English   中英

如何使用Python從子字符串中找到完整字符串?

[英]How to find full string from substring with Python?

如何自動提取擴展名為.csv的字符串的一部分。 以下示例顯示了我要從中提取2010_USACE_VA_minmax.csv的復雜字符串。 在我的情況下,無法使用簡單的切片,而是需要某種模式匹配。

sample = "1001        15707 May 08 23:01 2010_USACE_VA_metadata.xml\r\n-rw-rw-r--    1 311      1001         1784 May 08 23:01 2010_USACE_VA_minmax.csv\r\ndrwxrwxr-x    2 311      2013"

預期輸出

2010_USACE_VA_minmax.csv

如果您知道這些用空格隔開,並且名稱本身本身不包含任何空格,並且您正在嘗試查找以.csv結尾的令牌,那么您也可以

>>> tokens = sample.split()
>>> matches = [ i for i in tokens if i.endswith('.csv') ]
>>> matches
['2010_USACE_VA_minmax.csv']

使用正則表達式\\S+\\.csv(?!\\S)可以實現相同的行為,但可讀性不高:

>>> import re
>>> re.findall(r'\S+\.csv(?!\S)', sample)
['2010_USACE_VA_minmax.csv']

這里\\S+表示至少1個連續的非空白字符\\. 是字面意思. 字符和(?!\\S)表示.csv不能由非空白字符(負零寬度超前斷言)后繼。


但是,看起來您正在解析ls * nix命令的輸出-另一種方法是使用glob模塊查找匹配的文件:

>>> from glob import glob
>>> glob('*.csv')
['2010_USACE_VA_minmax.csv']

此正則表達式提取了csv文件。 可能會有一個更強大的正則表達式,我並不完美。 但這有效:

僅供參考:我用它來測試: Pythex

圓括號非常重要,因為它們是您的捕獲組,可以提取您要查找的內容。

(\\s\\w+\\.csv)

如果您想處理文件名中的空格,我相信這應該可以工作:

(\\s[\\w,\\s-]+\\.csv)

這是Python中的正則表達式的侵權: https : //docs.python.org/3/library/re.html

如果路徑中沒有空格:

print(sample[:sample.find(".csv")+4].rsplit(None, 1)[1])
2010_USACE_VA_minmax.csv

輸出看起來也好像來自unix命令,因此使用linux工具來解析它可能是一個主意,如果它是unix命令,則格式很可能是一致的,因此可以拆分行以獲得文件名:

sample = "1001        15707 May 08 23:01 2010_USACE_VA_metadata.xml\r\n-rw-rw-r--    1 311      1001         1784 May 08 23:01 2010_USACE_VA_minmax.csv\r\ndrwxrwxr-x    2 311      2013"


for line in sample.splitlines():
    f  = line.rsplit(None, 1)[1]
    print(f)
2010_USACE_VA_metadata.xml
2010_USACE_VA_minmax.csv
2013

我認為2013年來自您已將某些輸出截斷了。

如果您使用子進程來運行命令,而您不需要任何其他數據,則ls可以使用通配符:

from subprocess import check_output
f = check_output(["ls","*.csv"])

或者按照您自己的命令獲取權限等。

data = check_output(["ls","-l","*.csv"])

這將只給您.csv文件及其權限,因此您只需要使用分隔線再次遍歷輸出,最后每個文件都是一個csv文件。

import re
mobj = re.search(r'\s\d{4}_[^ ]*csv',sample)          
print(mobj.group())

輸出

2010_USACE_VA_minmax.csv

暫無
暫無

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

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