簡體   English   中英

讀取特定字符時拆分字符串

[英]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) 在這里,我們不需要分隔符(實際上我無法想象為什么會這樣),因此我們將其分配給一次性變量_

下面是該文檔str.partition ,並在這里是為文檔str.split

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM