[英]python check and replace a number
我是python的初學者..我的數據線看起來像這樣
2015-04-18 10 101011
2015-04-18 10 102000
2015-04-18 20 222222
2015-04-18 20 100000
如果下面提到的使用 () 的字符是 10 我想將它替換為 1 和 2 如果它是 20
2015-04-18 10 101011 to 2015-04-18 1 101011
2015-04-18 20 101011 to 2015-04-18 2 101011
我逐行閱讀每一行
with open("test.txt",'r') as f:
file = f.readlines()
for each in file:
我將如何在這里給出 if 語句...
正則表達式是一種可能性,但可能是矯枉過正。 這是使用split()
的解決方案:
DATA =\
"""2015-04-18 10 101011
2015-04-18 10 102000
2015-04-18 20 222222
2015-04-18 20 100000"""
def process_data(data):
substitutions = {'10':'1', '20':'2', '30':'3'}
for line in data.splitlines():
components = line.split()
components[1] = substitutions[components[1]]
yield ' '.join(components)
if __name__ == '__main__':
for line in process_data(DATA):
print(line)
輸出
2015-04-18 1 101011
2015-04-18 1 102000
2015-04-18 2 222222
2015-04-18 2 100000
假設
由於您的問題中有許多細節沒有說清楚,我將列出我對這個實現所做的假設:
components[1]
將導致引發IndexError
)。Otherwise ' '.join(components)
將產生與原始間距不同的行。 沒有對輸入(“10”和“20”)及其替換(“1 和 2”)之間的關系做出任何假設。 從這個非常小的數據集來看,它看起來像f(x) = x/10
,但只有你知道。 如有必要,您可以根據您的用例調整替換邏輯。
使用帶有替換回調的re.sub
函數的解決方案:
def shortenDigits(m):
d = {'10': '1', '20': '2', '30': '3'}
val = m.group(2)
return m.group(1) + (val if val not in d else d[val])
with open('test.txt', 'r') as fh:
lines = fh.readlines()
replaced = [re.sub(r'^(\d{4}-\d{2}-\d{2} )(\d{2})', shortenDigits, l) for l in lines]
print(replaced)
輸出:
['2015-04-18 1 101011\n', '2015-04-18 1 102000\n', '2015-04-18 2 222222\n', '2015-04-18 2 100000\n']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.