python為啥我這個maketrans報錯!

你的Python程序有兩處錯誤.

1 maketrans()方法是用於創建字元映射的轉換表,所以其兩個作為參數的字元串長度必須一致.你的兩個字元串長度不一致

2 因為你要轉換的是字元串類型的數據,而不是byte類型的數據,所以你應該用str.maketrans()

改正後的Python程序如下

a='asdkjsk.fil3asdlkfhksdfgjdksfg'
b=str.maketrans('askjdhasf','123123123')
c=a.translate(b)
print(c)

Ⅱ python中maketrans要引入什麼包

閉包在python中的應用之translate和maketrans用法詳解
閉包在python中的應用之translate和maketrans用法,是比較實用的技巧參考下
相對來說python對字元串的處理是比較高效的,方法也有很多。其中maketrans和translate兩個方法被應用的很多,本文就針對這兩個方法的用法做一總結整理。
首先讓我們先回顧下這兩個方法:
① s.translate(table,str) 對字元串s移除str包含的字元,剩下的字元串按照table里的字元映射關系替換。table可以理解為轉換表,比較'a' -> 'A', 'b'->'B'.
② tabel = string.maketrans('s1', 's2') s1 和 s2 的長度必須一致,maketrans生成一個轉換表,若在s中有s1,則替換為s2,這個轉換表是字元字元一個個對應的,沒必要全部包含。
舉幾個例子:
import string
s = 'helloworld, 0001111'
table = string.maketrans('','')#沒有映射,保留原字元串
s.translate(table) #hello world, 0001111
s.translate(table, 'hello000)'#world, 1111
table = string.maketrans('abcdefgh','ABCDEFGH')
s.translate(table)#HEllo,worlD,0001111
s.translate(table,'world')#HEllo,0001111
我們現在可以將makerans,translate包裝起來,形成一個返回閉包的工廠函數(print就是工廠函數),如下所示:
import string
def translator(frm = '', to='', delete= '', keep = None):
if len(to) == 1:
to = to * len(frm)
trans = string.maketrans(frm, to)
if keep is not None:
allchars = string.maketrans('','')
delete = allchars.translate(allchars, keep.translate(allchars, delete))
def translate(s):
return s.translate(trans, delete)
return translate
函數的最後用到了閉包,閉包是指有權訪問另一個函數作用域中的變數的函數。創建閉包的常見方式,就是在一個函數內部創建另一個函數:
def make_adder(addend):
def adder(augend): return augend + addend
return adder
執行 p = make_addr(23)將產生內層函數addr的一個閉包,這個閉包在內部引用了名字addend,而addend又綁定到數值23,執行p(100)則最終返回123。
現在我們已經把各種可能性封閉在一個建議以用的介面後面。
>>>digits_only = translator(keep = string.digits)
>>>digits_only('Chris Perkins :224 -7992')
'2247992'
移除屬於某字元集合的元素也非常簡單:
>>>no_digits = translator(delete = string.digits)
>>>no_digits('Chris Perkins:224-7992')
'Chris Perkings : - '
也可以替換:
>>>digits_to_hash = translator(from = string.digits, to = '#')
>>>digits_to_hash('Chris Perkins :224-7992')
'Chris Perkins: ###-####'
當delete和keep有重疊部分的時候,delete參數優先
>>>trans = translator(delete = 'abcd', kepp ='cdef')
>>>trans('abcdefg')
'ef'
其實可以更詳細的添加一些異常來處理同時出現delete,keep的情況。

Ⅲ python中如何對多個字元快速替換

python中快速進行多個字元替換的方法小結

先給出結論:

  • 要替換的字元數量不多時,可以直接鏈式replace()方法進行替換,效率非常高;

  • 如果要替換的字元數量較多,則推薦在 for 循環中調用replace()進行替換。

  • 可行的方法:

    1. 鏈式replace()

    ?

    1
  • string.replace().replace()
  • 1.x 在for循環中調用replace()「在要替換的字元較多時」

    2. 使用string.maketrans

    3. 先 re.compile 然後 re.sub

Ⅳ python手冊中 x[, y[, z]] 是什麼意思 (譬如static str.maketrans(x[, y[, z]]) )

放在中括弧中的參數表示是可選的,static表示靜態方法,可以直接用類名調用
static str.maketrans(x,y,[,z]])表示這個方法可以接受一,二或三個參數,這個方法的返回值可用於字元串的translate方法進行字元映射替換
當只有一個參數時,這個參數必須是字典,比如
smap=str.maketrans({'a':'firstletter'})
print('abcdef'.translate(smap))
將列印'firstletterbcdef',即將字元a替換為firstletter
如果有兩個參數,則兩個參數必須是等長字元串,用於對字元進行一對一映射,比如

smap=str.maketrans('abc','hij')
print('abcdef'.translate(smap))
將列印'hijdef',即a替換為b,b 映射為i,c映射為j
如果還有三個參數,則第三個參數中的字元將被刪除,比如
smap=str.maketrans('abc','hij','def')
print('abcdef'.translate(smap))
將列印'hij'

Ⅳ python報錯cannot import name 'maketrans' from 'string' 但是string.py是存在的,

說明string.py模塊里沒有一個叫做maketrans的方法

Ⅵ maketrans不在python3裡面么

閉包在python中的應用之translate和maketrans用法詳解

Ⅶ allchars=string.maketrans('','')可獲得所有字元 python3.3版本怎麼代替呢str.maketrans('','')返回{}

現在改成
str.maketrans