龙空技术网

Python字符串操作大师

python大爆炸 283

前言:

而今你们对“pythonint转为字符串”大约比较重视,兄弟们都想要了解一些“pythonint转为字符串”的相关知识。那么小编也在网上网罗了一些有关“pythonint转为字符串””的相关内容,希望兄弟们能喜欢,你们快快来了解一下吧!

我们总结了 Python 中的基本字符串操作。对于有经验的人来说可能还不够,但是...

(补充2018.12.23:print语法现已兼容Python3,如果Python2中复制粘贴的代码不起作用from __future__ import print_function,请放在代码端开头。)

Python 字符串 = 不可变

Python 字符串是不可变的,所以即使你想部分重写它们,你

也必须将它们组装成一个新的字符串对象。

例如,执行字符串替换的方法replace返回另一个字符串对象,其中包含替换的内容。

链接

使用运算符进行连接+

a = 'Python'b = '2.7'c = a + bprint(c)  # => 'Python2.7'

由于是按顺序处理的,即使连接很多也没关系

a = 'Python'b = ' is 'c = 'fancy'print(a + b + c)  # => 'Python is fancy'

join还有一种使用方法和列表/元组连接的技术。

顺便说一句,Ruby 的joinArray 方法(将连接的字符串作为参数),Python 的joinstr 方法(将列表/元组作为参数),反之亦然,所以如果你对 Ruby 有丰富的经验,你应该小心。

strings = ['dog', 'cat', 'penguin']print(','.join(strings))  #=> 'dog,cat,penguin'
重复

如果重复相同的内容,如果*运算符给出一个整数,则会生成一个重复指定次数的字符串。

s = 'dog?'print(s * 3)  #=> 'dog?dog?dog?'
嵌入价值

有三种方法可以将变量的值扩展为字符串。也许还有其他我不知道的。

sprintf 风格: '%s, %s' % ('Hello', 'World')扩展 sprintf 风格: '%(a)s, %(b)s' % dict(a='Hello', b='World')使用格式方法: '{0}, {1}'.format('Hello', 'World')

(注)我不知道第二个的确切名称,但我决定将其称为扩展的 sprintf 样式。

sprintf 风格

如果你给一个带有操作符的字符串一个值或列表/元组%,它可以展开如下。

a = 'Python'b = 'a programming language'print('%s is %s' % (a, b))  # => 'Python is a programming language'c = 'World'print('Hello, %s!' % c)  # => 'Hello, World!'

您还需要提供与字符串中的扩展符号(等等)一样多的值%s。它不能多或少。如果有一个扩展符号,%后面的值不需要是列表/元组。(也是由一个元素列表/元组展开)在上面的例子中,第一个print语句的模板字符串%s包含两个展开符号,所以%后面的值给出的元组元素个数也变成了两个。%如果要将字符本身保留为模板字符串中的字符,请%%使用'%' 2 characters。

有以下格式说明符。除非您确定,否则暂时离开%s它可能是个好主意。我想解释如何将格式说明符写入printf 的维基百科页面。

%s --展开为字符串%d -- 展开为整数%f -- 扩展为小数点

如果您想将元组和列表扩展为'(1, 2, 3)'字符串,例如

tuple_var = (1, 2, 3)print('tuple_var is: %s' % (tuple_var,))

如果你不这样做,你会生气,就像只有一个可以替换的占位符一样,即使有三个,所以要小心。

扩展的 sprintf 风格

* 扩展 sprintf 风格是我给自己起的名字 (^^;

在格式字符串后面的括号中指定dict对象的key,在格式字符串%的运算符右侧指定dict对象%。如果在重复嵌入相同的值时已经有一个 dict 变量,这很有用。

v = dict(first='Michael', family='Jackson')print('He is %(first)s, %(first)s %(family)s.' % v)
格式方法的使用

format您可以通过使用format方法来使用特定于方法的模板语言。

print('{0}, {1}'.format('Hello', 'World'))  #=> 'Hello, World'

有关更多详细信息,请参阅格式化迷你语言规范。

代替

s = 'Today is Monday.'ss = s.replace('Monday', 'Sunday')  #=> 'Today is Sunday.'print(ss)s2 = 'Hello Hello'ss2 = s2.replace('Hello', 'Bye')  #=> 'Bye Bye' 第三引数を指定しなければすべて置換されるprint(ss2)s3 = 'World World'ss3 = s3.replace('World', 'Hello', 1)  #=> 'Hello World' # 第三匹数で置換する個数を指定print(ss3)

对于按照某种模式替换字符串等处理,使用re(正则表达式)包的sub方法。

import res = 'Hello World'print(re.sub(r"[a-z]", "A", s))  #=> 'HAAAA WAAAA'
获取第 N 个字符
s = 'abc'n = 1  # 'a'がほしいprint(s[n-1])  # 0ベースインデックスで文字を取得s2 = 'xyz'print(s[-1])  # 'z' 最後の文字
获取一个子串(从第N个字符中取出M个字符)
s = "This is a pen."n = 1m = 4print(s[n-1:n-1+m])  # 'This'print(s[0:4])  # 'This'print(s[-4:-1])  # 'pen'
搜索

find用来。当您想向后搜索时可以使用它rfind

find 如果找到相应的字符串,则返回从 0 开始的字符串位置,如果没有找到,则返回 -1。

s = 'abcabcabc'index = s.find('b')  # indexは1(2文字目)

您可以使用第二个参数指定开始搜索的位置。

s = 'abcabcabc'index = s.find('b', 2)  # indexは4(5文字目)

您可以使用以下代码在字符串中找到所有目标。

s = 'abcabcabc'target = 'b'index = -1while True:    index = s.find(target, index + 1)    if index == -1:        break    print('start=%d' % index)
一次处理一个字符

由于字符串类型也是一个迭代器,所以可以用for进行如下处理。我希望你想要一个字符列表list(strvalue)

for c in 'aiueo':    print(c)print(list('hoge'))  # => ['h', 'o', 'g', 'e']

可能有一种方法可以在引用索引中的字符时进行提取。

s = 'aiueo'for i in range(len(s)):    c = s[i]    print(c)
去掉两端的空白

strip,,可以使用lstrip。 strip 是一个字符串,从两端删除了空格、制表符和换行符(\r 和 \n), lstrip 仅对左端应用与 strip 相同的处理,而 rstrip 仅对 strip 应用相同的处理右端。返回应用的内容。rstrip

s = ' x 'print('A' + s.strip() + 'B')  # => 'AxB'print('A' + s.lstrip() + 'B')  # => 'Ax B'print('A' + s.rstrip() + 'B') # => 'A xB'
删除换行符(相当于perl或ruby chomp的处理)

rstrip看起来可以做到。但是,如果有两个结尾有空格和换行符的模式,并且您只想删除换行符,则需要使用参数指定要删除的字符。

line = 'hoge\n'msg = line.rstrip() + 'moge'print(msg)  # => 'hogemoge'with open('./test.txt') as fh:    for line in fh:        no_line_break_line = line.rstrip()        # なにかする# 空白は削除せずに改行だけ削除するline_with_space = 'line \n'  # 改行の前の空白は削除したくないprint(line_with_space.rstrip('\n'))  # => 'line '
全部大写

upper()使用方法。

print('hello'.upper())  # => 'HELLO'
全部小写

lower()使用方法。

print('BIG'.lower())  # => 'big'
找出字符串是否作为子字符串包含在内
s = 'abc'print('b' in s)  #=> Trueprint('x' in s)  #=> False
计算字符串作为子字符串出现的次数

find您可以使用之前提出的方法自己做,count但是有一个方便的方法。

s = 'aaabbc'print(s.count('b'))  #=> 2
将 int 转换为字符串
v = 1print(str(v))print('%d' % v)
将浮点数转换为字符串
f = 1.234print(str(f))  #=> '1.234'print('%f' % f)  #=> '1.234000'
将列表转换为字符串,将元组转换为字符串

有时您想在调试打印等中将其表示为字符串。

v = [1,2,3]print(str(v))  #=> '[1, 2, 3]'print('%s' % v)  #=> '[1, 2, 3]'

%s如果您尝试显示一个元组,Python 会将给定的元组解释为模板的值列表,您将收到错误消息。

v = (1, 2, 3)print(str(v)) #=> '(1, 2, 3)' よい例print('%s' % v) #=> '(1, 2, 3)'を期待するが、TypeErrorになってしまうprint('%s' % (v,)) #=> '(1, 2, 3)' よい例

join尝试使用诸如组装也很好。

v = [1,2,3]print('<' + ('/'.join([ str(item) for item in v ])) + '>')  #=> '<1/2/3>'

tuple对象也是如此。

将字典转换为字符串

有时您想在调试打印等中将其表示为字符串。

v = dict(a=1, b=2)print(str(v))  #=> "{'a': 1, 'b': 2}"print('%s' % v)  #=> "{'a': 1, 'b': 2}" 

keys您还可以使用或列表理解join生成一个带有一个衬里的字符串。

v = dict(a=1, b=2)print('<' + ', '.join([ '%s=%s' % (k, v[k]) for k in v.keys() ]) + '>')  #=> '<a=1, b=2>'
使字节成为 unicode 字符串

从文件或套接字读取的数据(以二进制模式打开)是字节字符串,因此如果不将其解释为 unicode 字符串,将无法以字符为单位进行操作。Python2系列(2.7等)中区分str(字节串)和unicode(字符串),在Web应用等期望输入多字节字符的场景中,最好把字符串当作unicode对象... 使用一种方法将字节字符串解释为具有指定编码的 unicode 字符串decode()

Python3系列中strtype为字符串类型(对应Python2系列unicode类型),bytestype为byte字符串类型(对应Python2系列str类型)。

with open('utf8_content_file.txt', 'rb') as fh:  # rbなのでバイナリモード    byte_content = fh.read()  # ぜんぶ読み込む, この時点ではバイト列    print(len(byte_content))  # バイト数    unicode_string = byte_content.decode('utf-8')  # utf-8エンコーディングで、文字の並びとして解釈    print(len(unicode_string))  # 文字数

decode()该方法的默认编码是,utf-8如果您知道要解释的字节字符串的编码是 UTF-8,则可以省略编码。

bytes_data = b'\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x88\xe5\x88\x97'print(bytes_data.decode())  # => 'バイト列'

日语中常用的编码如下所示。

utf_8UTF-8(别名utf-8 U8 utf8 cp65001:)shift_jisShift JIS(也称为csshiftjis shiftjis sjis s_jis:)cp932Shift JIS(扩展移位 JIS)(也称为932 ms932 mskanji mks-kanji:)euc_jpEUC-JP(也称为eucjp ujis u-jis:)iso2022_jpcsiso2022jp iso2022jp iso-2022-jpJIS (ISO-2022-JP ) (别名:)

Python 支持的其他编码codecs可以在包页面找到:https ://docs.python.org/ja/3/library/codecs.html

将 unicode 字符串转换为字节

相反,当写入文件或套接字(以二进制模式打开)时,字符串必须是字节字符串。在这种情况下,使用unicode object的encode()方法。

unicode_string = u'マルチバイト文字の文字列'with open('./utf8_content_file.txt', 'wb') as fh:  # 書き込み+バイナリモードでopen    byte_content = unicode_string.encode('utf-8')  # utf-8エンコーディングで表現した場合のバイト列を取得    fh.write(byte_content)  # バイト列を書き込み

encode()utf-8该方法也表现得好像它是在没有传递编码的情况下传递的。

str_data = 'バイト列'print(str_data.encode()) # => b'\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x88\xe5\x88\x97'

标签: #pythonint转为字符串