【Day14-字串】浅谈python中最常用到的str处理方式——格式化、寻找、取代、分割、合并

在资料处理的过程中,我们最常会面对的不外乎四种类型

  • 数值
  • 文字
  • 影像
  • 音讯

因此接下来几天会稍微针对这些资料的基本操作和认知稍微谈一下

str基本操作

如何产生一段字串

字串相接-使用+*

s1 = "pui"
print(s1 + "~") # 字串加法为前後相接
print(s1 * 3) # 字串乘法为重复n次

输出:

pui~
puipuipui

格式化字串-使用%

如果有写过C语言的读者应该对这个符号不陌生,这是个用来控制格式化输出的符号,在原始字串中透过不同的标记来达成不同输出格式的结果,常用的格式化符号为:

  • %d:替换掉一个整数
    • %03d:替换掉一个整数,且往前补0到3位为止(超过不影响)
  • %f:替换掉一个浮点数(小数)
    • %.2f:替换掉一个浮点数,且四舍五入到小数点後第2位
  • %s:替换掉另一个字串
print("热爱%d度的你" % 105) # 取代一个整数
print("%f四舍五入後是%.2f" % (1.234, 1.234)) # 有多个地方需要取代的时候需要用()起来
print("这是一颗%s" % "苹果")

输出:

热爱105度的你
1.234000四舍五入後是1.23
这是一颗苹果

格式化字串-使用.format()

虽然使用%来格式化字串可以非常清楚的看出要替换掉的格式
但是对於要放什麽变数表示什麽意思进去则比较不具备可读性
因此这边提供了另一种方法来在格式化字串的过程中就可以在中间标记不同替换位置的意义

print("热爱{temperature}度的你".format(temperature=105)) # 用{}包一个名称,format後面给这个名称的值
print("{a}四舍五入後是{a:.2f}".format(a=1.234)) # 可以和%一样指定格式
print("这是一颗{}".format("苹果")) # {}内没名称的话就是按顺序对应

输出:

热爱105度的你
1.234四舍五入後是1.23
这是一颗苹果

新方法-fstring(限python3.6以後版本)

而在python3.6之後,又出现了一个更加方便的用法
不用另外再对字串设定一个替换掉的名称,直接使用原本存在的变数即可
而格式方面也一样可以调整哦

temperature = 105
a = 1.234
b = "苹果"

print(f"热爱{temperature}度的你") # 字串前面加f,中间用{}包变数名称
print(f"{a}四舍五入後是{a:.2f}") # 可以和%一样指定格式
print(f"这是一颗{b}") # 但不能和format一样名称留空

输出:

热爱105度的你
1.234四舍五入後是1.23
这是一颗苹果

如何在字串中进行寻找?

有的时候我们需要在一个长的字串当中寻找我们的短字串是否被包含在里面
这个时候根据我们是想要看它在不在或是看它出现在哪里可以分别使用不同的工具

子字串是否包含在里面——使用in

print("台湾" in "中国") # 这样应该就不会被搬运过去了吧?
print("鱿鱼" in "鱿鱼游戏")

输出:

False
True

子字串在哪里?——使用findrfind

s2 = "一只绵羊两只绵羊三只绵羊"
print("第1只绵羊在", s2.find("绵羊")) # 回传的是开头的index
print("最後1只绵羊在", s2.rfind("绵羊")) # rfind从右边开始找
print(s2[2:4])
print(s2[10:10+len(s2)])

输出:

第1只绵羊在 2
最後1只绵羊在 10
绵羊
绵羊

分割与合并

有的时候我们也需要对字串去进行分割或是合并的处理——其实之前讲过的csv格式也可以直接一行一行读进来之後这样处理哦~

以特定字符分割字串——使用.split()

s3 = "1989-06-04" # 一时想不到其他例子,再用个防盗例子
date_list = s3.split("-")
date_list

输出:

['1989', '06', '04']

以特定字符合并字串——使用.join()

"/".join(date_list) # 把前面的字串放在後面list的每个元素中间

输出:

'1989/06/04'

如何看待文字资料?

虽然今天讲的主要是对於python字串的一些基本处理语法,但也就顺便点一下关於我们要如何看待文字资料这件事情

  • 今天数字的资料我们可以很轻易的从它的来解读它的意义,那文字呢?
  • 对於电脑是怎麽看待这些不同的文字的,是要当成一个一个字母还是一个一个单字呢?
  • 电脑真的认得出来"apple"代表什麽意思吗?如果不行,那我们要如何把它转换成可以分析处理的形式呢?
  • 如果我们把不同单字当成不同意思,那"apple"和"apples"又应该看做相同还是不同呢?
  • 还有很多很多需要考虑的...

这边就先简单提及一下,希望对於初接触这块的读者们可以在做这些基本处理的过程中就能对後续文字分析可能会遇到的问题先想看看~


<<:  DAY14 - 档案类的物件关系厘清(3) - ArrayBuffer

>>:  Day 14: Structural patterns - Decorator

基於格的访问控制模型(a lattice-based access control model)

“格是在有序理论和抽象代数的数学子学科中研究的抽象结构。它由一个偏序集合组成,其中每两个元素都有一个...

Day 18 prototype 配色与精稿绘制

来找设计师一起 side project,前後端 / UIUX 皆可ㄛ。配对单连结: https:...

尽职调查(due diligence)

-尽职调查和应有注意 当谈到 CISSP 时,尽职调查 (DD) 的定义是模糊和不一致的。 IMO...

【Docker】04 使用WSL Ubuntu安装 Laravel with Sail

摘要 在 Windows 使用 wsl 进入 Ubuntu。安装 Laravel Sail 及其自动...

Day27 - 轻前端 Component - jQuery UI DatePicker

这篇要做的:把订单日期改用 jQuery UI DatePicker + vue component...