所以我有一个包含完整信用卡号的csv文件。我们不需要完整的号码,因此我正在编写一个快速脚本来解析csv并用掩码表示替换cc号。 (除了最后四个之外所有*)。我是python的新手,并且已经破解了它,并且它可以工作,但是为了学习我想知道它是否可以更容易完成。
假设“str”将是一个完整的信用卡号码。但是为了我的例子,我只使用字符串“CREDITCARDNUMBER”。
str = "CREDITCARDNUMBER";
strlength = len(str)
masked = strlength - 4
slimstr = str[masked:]
print "*" * masked + slimstr
输出正是我想要的
************MBER
但我相信有更优雅的解决方案。 :)谢谢!
答案 0 :(得分:14)
Neater仍然:
>>> s = "CREDITCARDNUMBER"
>>> s[-4:].rjust(len(s), "*")
'************MBER'
答案 1 :(得分:7)
也许稍微优雅一点:
card = "CREDITCARDNUMBER"
print "*" * (len(card) - 4) + card[-4:]
请注意,我避免使用名称str
,因为它已经是内置字符串类型的名称。使用影响内置名称的名称通常不是一个好主意。
答案 2 :(得分:3)
对于那些想要保留Issuer Identification Number(IIN)(以前称为“银行识别码”(BIN))的人,通常是前6位数,应该做的工作:
print card[:6] + 'X' * 6 + card[-4:]
'455694XXXXXX6539'
答案 3 :(得分:2)
'{:*>16}'.format(card[-4:])
答案 4 :(得分:0)
你可以把它缩短一点:
str = "CREDITCARDNUMBER";
print "*" * (len(str) - 4) + str[-4:];
答案 5 :(得分:0)
我想要一种灵活的方法来掩盖东西,所以我想我会分享......
ffmpeg -i input.mkv -f ffmetadata metafile
答案 6 :(得分:0)
我认为您可以使用简单的正则表达式替换和两个字符串切片来获得一个体面可读的解决方案,而不必担心len
中的str
:
import re
str = 'CREDITCARDNUMBER'
print(re.sub('.', '*', str[:-4]) + str[-4:])
我不确定这是否比原始版本更“优雅”,但确实如此。
答案 7 :(得分:0)
我们也可以使用此功能:
def maskify(cc):
if len(cc) < 4:
return cc
return "#" * (len(cc)-4) + cc[-4:]