假設你有這份名單
>>> L = ['00:00:10.000000, 500.000000000, 5.00000000, 80.00,\n',
... '00:00:10.002667, 500.000000000, 5.00000000, 80.00,\n']
你可以每行分成列表這樣
>>> [item.split() for item in L]
[['00:00:10.000000,', '500.000000000,', '5.00000000,', '80.00,'], ['00:00:10.002667,', '500.000000000,', '5.00000000,', '80.00,']]
但你仍然需要進一步的處理,並自每個領域的處理都是不同的,但試圖在列表理解中做到這一點是尷尬和混亂的。相反,首先編寫一個輔助函數。讓我們把它稱爲「process_item
」
>>> def process_item(item):
... return item.split()
...
>>> [process_item(item) for item in L]
[['00:00:10.000000,', '500.000000000,', '5.00000000,', '80.00,'], ['00:00:10.002667,', '500.000000000,', '5.00000000,', '80.00,']]
現在你在一個更好的位置是添加一些代碼來process_item
來處理你的個人領域
>>> def process_item(item):
... f1, f2, f3, f4 = item.split()
... f1 = f1.rstrip(',')
... f2 = f2.rstrip(',') # more code needed here
... f3 = f3.rstrip(',') # more code needed here
... f4 = f4.rstrip(',')
... return [f1, f2, f3, f4]
讓我們來看看你會如何解決F2和F3
>>> f2 = '500.000000000'
>>> f2[:f2.find('.')+2]
'500.0'
但你不想這樣做,如果有在F2
沒有
>>> f2 = '500'
>>> f2[:f2.find('.')+2]
'5'
因此,您需要使用if
進行測試。現在把它放在一起
>>> def process_item(item):
... f1, f2, f3, f4 = item.split()
... f1 = f1.rstrip(',')
... f2 = f2.rstrip(',')
... f3 = f3.rstrip(',')
... f4 = f4.rstrip(',')
... if '.' in f2:
... f2 = f2[:f2.find('.')+2]
... if '.' in f3:
... f3 = f3[:f3.find('.')+2]
... return [f1, f2, f3, f4]
...
>>> [process_item(item) for item in L]
[['00:00:10.000000', '500.0', '5.0', '80.00'],
['00:00:10.002667', '500.0', '5.0', '80.00']]
最全面的答案。也許標準化「整數」字符串格式的另一種選擇是將它們轉換爲浮點數並使用字符串格式說明符指定句點後的適當位數以將其轉換回適當的字符串。首先,這將取消對'。'的檢查。其次,如果'。'沒有找到,它會將它加入......如果這是OP的意圖。第三,你不必假設在這段時間後會有足夠的'0'。唯一的假設是最後3個字符串可以轉換爲浮點數。 – lightalchemist