簡體   English   中英

使用多個具有預定義值的字符串替換基於列的字符串-Python

[英]Replace column based strings with multiple with pre-defined values - Python

我對在python中實現以下邏輯的方法感到有些困惑。 在選擇一種方法時,我需要專家的建議。

我必須用某些列中的預定義值替換字符串。 例如

| 是定界符

輸入:

ABCD|NewYork|800|TU
XYA|England|589|IA

輸出:

QWER|NewYork|800|PL
NHQ|England|589|DQ

預定義詞典:

Actual Value  : ABCDEFGHIJKLMNOPQRSTUVWXYZ
Replace Value : QWERTYASDFGHNBVCXZOPLKMNHY

因此,如果值為ABCD,我應該得到QWER。 如果是TU,則應將其替換為PL。 這些值可以是隨機的。

我的方法如下

  1. 讀一行,然后轉到第1列
  2. 讀取每個字符,並使用替換值一一替換
  3. 轉到第4列,然后閱讀每個字符並一一替換
  4. 轉到下一行,依此類推。

我覺得這可能是不好的編碼方式。 與上述方法有什么不同的方法嗎? 請提出一種方法。

不同文件的列可能不同。 應該是動態的

您可以使用str.translatestr.maketrans使您的生活更加輕松:

In [1]: fnd = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   ...: rpl = 'QWERTYASDFGHNBVCXZOPLKMNHY'
   ...: trns = str.maketrans(fnd, rpl)

In [2]: 'ABCD'.translate(trns)
Out[2]: 'QWER'

In [4]: 'UV'.translate(trns)
Out[4]: 'LK'

這是對str.join使用列表str.join一種方法。

訣竅是將字典轉換為Python dict

x = ['ABCD|NewYork|800|TU',
     'XYA|England|589|IA']

d = dict(zip('ABCDEFGHIJKLMNOPQRSTUVWXYZ',
             'QWERTYASDFGHNBVCXZOPLKMNHY'))

res = ['|'.join([''.join(list(map(d.get, i[0])))]+i[1:]) \
       for i in map(lambda y: y.split('|'), x)]

結果:

['QWER|NewYork|800|TU',
 'NHQ|England|589|IA']

應該這樣做:

from string import maketrans

actual = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

replace = 'QWERTYASDFGHNBVCXZOPLKMNHY'

with open('infile.txt') as inf, open('outfile.txt', 'w') as outf:
    toBeWritten = []
    for line in inf:
        items = line.strip().split('|')
        items[0] = items[0].translate(maketrans( actual, replace))
        items[3] = items[3].translate(maketrans( actual, replace))
        print items
        toBeWritten.append('|'.join(items))
    outf.writelines(toBeWritten)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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