[英]Split string when a certain character is read
我在文件中每行存儲了幾個字符串,如下所示:
dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...
如您所見,始終存在的唯一字符是反沖/
,其余字符在組成上相當隨機。 我需要分別存儲每行的第一部分和第二部分(即:分別在反沖之前和之后),以便最終得到這樣的結果:
first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...]
secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...]
我可以通過python遍歷每一行,檢查是否存在反沖並分別存儲該行各部分的內容來做到這一點。 它看起來像這樣:
first_list, secnd_list = [], []
for line in file:
for indx, char in enumerate(line):
if char == '/':
first_list.append(line[:(indx-1)])
secnd_list.append(line[(indx-1):])
break
我正在尋找此代碼的更漂亮(更Pythonic)版本。
split()
在這里可能會派上用場:
first_list, secnd_list = [], []
for line in file:
first, second = line.split('/')
first_list.append(first)
secnd_list.append(second)
此處所做的假設之一是僅存在一個/
。 知道了, split('/')
將始終返回2個元素的元素。 如果此假設為假,請嘗試使用split('/', 1)
-將拆分的數量限制為1(從左到右)。
除了str.split
您還可以使用str.partition
:
first_parts = []
second_parts = []
for line in file:
before, _, after = line.partition('/')
first_parts.append(before)
second_parts.append(after)
另一種功能更強大的oneliner:
first_parts, _, second_parts = zip(*(line.partition('/') for line in file))
兩個選項中_
說明str.partition
返回一個元組: (first_part, seperator, last_part)
。 在這里,我們不需要分隔符(實際上我無法想象為什么會這樣),因此我們將其分配給一次性變量_
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.