ホームページ バックエンド開発 Python チュートリアル Python での文字列処理スキルの共有

Python での文字列処理スキルの共有

Feb 22, 2017 pm 05:07 PM

这篇文章给大家分享了Python中字符串的处理技巧,包括拆分含有多种分隔符的字符串、判断字符串a是否以字符串b开头或结尾、调整字符串中文本的格式已经将多个小字符串拼接成一个大的字符串等,感兴趣的朋友们可以通过阅读下文来学习。

一、如何拆分含有多种分隔符的字符串?

实际案例

我们要把某个字符串依据分隔符号拆分不同的字符段,该字符串包含多种不同的分隔符,例如:

s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd'
ログイン後にコピー

其中<,>,<;>,<|>,<\t>都是分隔符,如何处理?

解决方案

连续使用split()方法,每次处理一种分隔符

# 使用Python2 def mySplit(s,ds): res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split(d)), res) res = t return [x for x in res if x] s = &#39;asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd&#39; result = mySplit(s, ';,|\t') print(result)
ログイン後にコピー

C:\Users\Administrator>C:\Python\Python27\python.exe E:\python-intensive-training\s2.py [&#39;asd&#39;, &#39;aad&#39;, &#39;dasd&#39;, &#39;dasd&#39;, &#39;sdasd&#39;, &#39;asd&#39;, &#39;Adas&#39;, &#39;sdasd&#39;, &#39;Asdasd&#39;, &#39;d&#39;, &#39;asd&#39;]
ログイン後にコピー

使用正则表达式的re.split()方法,一次性拆分字符串

>>> import re >>> re.split(&#39;[,;\t|]+&#39;,&#39;asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd&#39;) [&#39;asd&#39;, &#39;aad&#39;, &#39;dasd&#39;, &#39;dasd&#39;, &#39;sdasd&#39;, &#39;asd&#39;, &#39;Adas&#39;, &#39;sdasd&#39;, &#39;Asdasd&#39;, &#39;d&#39;, &#39;asd&#39;]
ログイン後にコピー

二、如何判断字符串a是否以字符串b开头或结尾?

实际案例

如某目录有如下文件:

quicksort.c graph.py heap.java install.sh stack.cpp ......
ログイン後にコピー

现在需要给.sh.py结尾的文件夹上可执行权限

解决方案

使用字符串的startswith()endswith()方法

>>> import os, stat >>> os.listdir(&#39;./&#39;) [&#39;heap.java&#39;, &#39;quicksort.c&#39;, &#39;stack.cpp&#39;, &#39;install.sh&#39;, &#39;graph.py&#39;] >>> [name for name in os.listdir(&#39;./&#39;) if name.endswith((&#39;.sh&#39;,&#39;.py&#39;))] [&#39;install.sh&#39;, &#39;graph.py&#39;] >>> os.chmod(&#39;install.sh&#39;, os.stat(&#39;install.sh&#39;).st_mode | stat.S_IXUSR)
ログイン後にコピー

[root@iZ28i253je0Z t]# ls -l install.sh -rwxr--r-- 1 root root 0 Sep 15 18:13 install.sh
ログイン後にコピー

三、如何调整字符串中文本的格式?

实际案例

某软件的日志文件,其中日期格式为yyy-mm-dd:

2016-09-15 18:27:26 statu unpacked python3-pip:all 2016-09-15 19:27:26 statu half-configured python3-pip:all 2016-09-15 20:27:26 statu installd python3-pip:all 2016-09-15 21:27:26 configure asdasdasdas:all python3-pip:all
ログイン後にコピー

需要把其中日期改为美国日期的格式mm/dd/yyy, 2016-09-15 --> 09/15/2016,要如何处理?

解决方案

使用正则表达式re.sub()方法做字符串替换

利用正则表达式的捕获组,捕获每个部分内容,在替换字符串中各个捕获组的顺序。

>>> log = &#39;2016-09-15 18:27:26 statu unpacked python3-pip:all&#39; >>> import re # 按顺序 >>> re.sub(&#39;(\d{4})-(\d{2})-(\d{2})&#39;, r&#39;\2/\3/\1&#39; , log) &#39;09/15/2016 18:27:26 statu unpacked python3-pip:all&#39; # 使用正则表达式的分组 >>> re.sub(&#39;(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})&#39;, r&#39;\g<month>/\g<day>/\g<year>&#39; , log) &#39;09/15/2016 18:27:26 statu unpacked python3-pip:all&#39;
ログイン後にコピー

四、如何将多个小字符串拼接成一个大的字符串?

实际案例

在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数:

hwDetect: "<0112>" gxDepthBits: "<32>" gxResolution: "<1024x768>" gxRefresh: "<60>" fullAlpha: "<1>" lodDist: "<100.0>" DistCull: "<500.0>"
ログイン後にコピー

在程序中我们将各个参数按次序收集到列表中:

["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]
ログイン後にコピー

最终我们要把各个参数拼接成一个数据包进行发送:

"<0112><32><1024x768><60><1><100.0><500.0>"
ログイン後にコピー

解决方案

迭代列表,连续使用'+'操作依次拼接每一个字符串

>>> for n in ["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]: ... result += n ... >>> result '<0112><32><1024x768><60><1><100.0><500.0>'
ログイン後にコピー

使用str.join()方法,更加快速的拼接列表中所有字符串

>>> result = ''.join(["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]) >>> result '<0112><32><1024x768><60><1><100.0><500.0>'
ログイン後にコピー

如果列表中有数字,可以使用生成器进行转换:

>>> hello = [222,&#39;sd&#39;,232,&#39;2e&#39;,0.2] >>> &#39;&#39;.join(str(x) for x in hello) &#39;222sd2322e0.2&#39;
ログイン後にコピー

五、如何对字符串进行左, 右, 居中对齐?

实际案例

某个字典中存储了一系列属性值:

{ &#39;ip&#39;:&#39;127.0.0.1&#39;, &#39;blog&#39;: &#39;www.anshengme.com&#39;, &#39;title&#39;: &#39;Hello world&#39;, &#39;port&#39;: &#39;80&#39; }
ログイン後にコピー

在程序中,我们想以以下格式将其内容输出,如何处理?

ip : 127.0.0.1 blog : www.anshengme.com title : Hello world port : 80
ログイン後にコピー

解决方案

使用字符串的str.ljust() , str.rjust,str.cente()进行左右居中对齐

>>> info = {&#39;ip&#39;:&#39;127.0.0.1&#39;,&#39;blog&#39;: &#39;www.anshengme.com&#39;,&#39;title&#39;: &#39;Hello world&#39;,&#39;port&#39;: &#39;80&#39;} # 获取字典中的keys最大长度 >>> max(map(len, info.keys())) 5 >>> w = max(map(len, info.keys())) >>> for k in info: ... print(k.ljust(w), &#39;:&#39;,info[k]) ... # 获取到的结果 port : 80 blog : www.anshengme.com ip : 127.0.0.1 title : Hello world
ログイン後にコピー

使用format()方法,传递类似'<20','>20','^20'参数完成同样任务

>>> for k in info: ... print(format(k,&#39;^&#39;+str(w)), &#39;:&#39;,info[k]) ... port : 80 blog : www.anshengme.com ip : 127.0.0.1 title : Hello world
ログイン後にコピー

六、如何去掉字符串中不需要的字符?

实际案例

过滤掉用户输入卡后多余的空白字符: anshengm.com@gmail.com

过滤某windows下编辑文本中的'\r': hello word\r\n

去掉文本中的unicode组合符号(音调): ‘ní hǎo, chī fàn'

解决方案

字符串strip() , lstrip(),rstrip()方法去掉字符串两端字符

>>> email = &#39; anshengm.com@gmail.com &#39; >>> email.strip() &#39;anshengm.com@gmail.com&#39; >>> email.lstrip() &#39;anshengm.com@gmail.com &#39; >>> email.rstrip() &#39; anshengm.com@gmail.com&#39; >>>
ログイン後にコピー

删除某个固定位置的字符,可以使用切片+拼接的方法

>>> s[:3] + s[4:] &#39;abc123&#39;
ログイン後にコピー

字符串的replace()方法或正则表达式re.sub()删除任意位置字符

>>> s = &#39;\tabc\t123\txyz&#39; >>> s.replace(&#39;\t&#39;, &#39;&#39;) &#39;abc123xyz&#39;
ログイン後にコピー

使用re.sub()删除多个

>>> import re >>> re.sub(&#39;[\t\r]&#39;,&#39;&#39;, string) &#39;abc123xyzopq&#39;
ログイン後にコピー

字符串translate()方法,可以同时删除多种不同字符

>>> import string >>> s = &#39;abc123xyz&#39; >>> s.translate(string.maketrans(&#39;abcxyz&#39;,&#39;xyzabc&#39;)) &#39;xyz123abc&#39;
ログイン後にコピー

>>> s = &#39;\rasd\t23\bAds&#39; >>> s.translate(None, &#39;\r\t\b&#39;) &#39;asd23Ads&#39;
ログイン後にコピー

# python2.7 >>> i = u&#39;ní hǎo, chī fàn&#39; >>> i u&#39;ni\u0301 ha\u030co, chi\u0304 fa\u0300n&#39; >>> i.translate(dict.fromkeys([0x0301, 0x030c, 0x0304, 0x0300])) u&#39;ni hao, chi fan&#39;
ログイン後にコピー

总结

以上就是为大家整理的Python中字符串的处理技巧,文中通过案例、解决方案以及实例来演示如何解决,对大家学习或者使用python具有一定的参考借鉴价值。有需要的可以参考借鉴。

更多Python中字符串的处理技巧分享相关文章请关注PHP中文网!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

See all articles