有一個表格,其中有一列帶有近似形式的線條:
NAME:ENTRY ID:1562.003:NAME:Defenses:Command::::NAME::ENTRY ID:1574.006:NAME:Execution:Dynamic::::TAXONOMY NAME:ATTACK:ENTRY ID:1574.007:
字符數可以不同。
我只想從每一行中取數字,我使用代碼:
import csv
with open("/root/test.csv", encoding='utf-8') as r_file:
file_reader = csv.reader(r_file, delimiter=";")
count = 0
for row in file_reader:
n = f'{row[1]}'
print(''.join([x for x in n if x.isdigit()]))
不幸的是,我的代碼只會導致結果:
156200315740061574007
我想以以下形式獲得結果:
1562.003; 1574.006; 1574.007
你能告訴我如何實作這樣的結論嗎?非常感謝
uj5u.com熱心網友回復:
您可以使用正則運算式來測驗單元格是否包含看似數字的內容。為了提高效率,您可以在開始回圈之前編譯該正則運算式。
不幸的是,該運算式有點冗長,但它正在尋找包含可選小數點(最多一個)的內容,并且還必須在某處包含至少一位數字,但如果有小數點,則只需要在它的一側或另一側至少有一個數字。還允許有一個前導減號,并且可能在開始和結束時有一些空格。
import csv
import re
is_number = re.compile(r"^\s*-?(\d \.?\d*|\d*\.?\d )\s*$").match
with open("test.csv", encoding='utf-8') as r_file:
file_reader = csv.reader(r_file, delimiter=":")
for row in file_reader:
print('; '.join(cell for cell in row if is_number(cell)))
注意您輸入的分隔符似乎是錯誤的 - 我將其更改為:.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369007.html
下一篇:是否有關閉應用程式時觸發的事件?
