我有檔案:
If MARA.MTART in ('ZPLW', 'ZFTW'), then MARA.PSTAT like '%K%'
If MARA.MTART in ('ZPLW', 'ZFTW'), then MARA.MATKL = '99999999'
我想通過在“。”之后添加每個單詞來決議它。到一個串列(MART、PSTAT、MATKL),如果它已經在串列中,則跳過它。
所以串列是:
list = ['MTART', 'PSTAT', 'MATKL']
我不知道該怎么做。
uj5u.com熱心網友回復:
Python:
這可以通過re庫使用正則運算式輕松完成。可以在此處找到該方法的檔案。.findall()
迭代資料檔案的行并搜索定義的文本模式,并將結果填充到輸出串列中。使用該set()函式從串列中洗掉重復值,因為集合中只允許唯一值。
圖案說明:'\.([A-Z] )'
- 找到一個句號 (
.) - 搜索并捕獲一個或多個大寫字符,并在找到第一個非大寫字符時停止捕獲。
示例代碼:
import re
rexp = re.compile('\.([A-Z] )')
found = []
with open('./mara.csv') as f:
for line in f:
found.extend(rexp.findall(line))
list(set(found))
輸出:
['MTART', 'MATKL', 'PSTAT']
GNU:
另一方面,如果您想改用 GNU 工具,可以使用以下方法完成:
grep -Eo "\.([A-Z] )" mara.csv | awk -F. '{print $2}' | sort | uniq
輸出:
MATKL
MTART
PSTAT
uj5u.com熱心網友回復:
鑒于:
txt="""\
If MARA.MTART in ('ZPLW', 'ZFTW'), then MARA.PSTAT like '%K%'
If MARA.MTART in ('ZPLW', 'ZFTW'), then MARA.MATKL = '99999999'"""
只需使用集合理解:
>>> {w.partition('.')[2] for w in txt.split() if '.' in w}
{'MATKL', 'MTART', 'PSTAT'}
uj5u.com熱心網友回復:
import re
filename='yourcsv.csv'
with open(filename) as f:
ip = f.read()
test=list(set(re.findall(r'.\.(.*?) ', ip)))
print(test)
Output: ['MATKL', 'MTART', 'PSTAT']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497048.html
上一篇:比較兩個串列并獲取值不同的索引
下一篇:嘗試了解后端和前端
