簡體   English   中英

python檢查並替換一個數字

[英]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 )。
  • 第一個空格后面的數據將是“10”或“20”,然后是另一個空格。
  • 在每一行的所有空格部門是一個單一的空間。 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.

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