我有一個巨大的 python 串列,如下例所示:
ls = ['name: John', 'John has ', '4 yellow ', 'cars.', 'name: Angelina', 'Angelina has ', '5 yellow', 'cars.']
我想以這種格式加入這些資訊:
ls = ['name: John', 'John has 4 yellow cars.', 'name: Angelina', 'Angelina has 5 yellow cars.']
我試過這個代碼
with open ('names.txt', 'r') as text:
lines = text.readlines()
for index,line in enumerate(lines):
if not linha.startswith('name:'):
ls2.append(lines[index] lines[index 1])
但這并不好,因為我有類似的東西:
ls = ['name: John', 'John has 4 yellow', '4 yellow cars.', 'cars.name: Angelina']
你知道我該如何執行這項任務嗎?
uj5u.com熱心網友回復:
您可以使用itertools.groupby:
import itertools
ls = ['name: John', 'John has ', '4 yellow ', 'cars.', 'name: Angelina', 'Angelina has ', '5 yellow', 'cars.']
g = itertools.groupby(ls, lambda x: x.startswith('name: '))
output = [''.join(v) for _, v in g]
print(output) # ['name: John', 'John has 4 yellow cars.', 'name: Angelina', 'Angelina has 5 yellowcars.']
它根據每個專案是否以'name: ';開頭對專案進行分組。
- 以 開頭的專案
'name: '形成一個組(即,['name: John'])。 - 接下來的一些不這樣做的專案形成一個組(即,
['John has ', '4 yellow ', 'cars.'])。 - 這樣做的下一個專案形成另一個組 (
['name: Angelina'])。 - …… 以此類推。
然后join連接每個組中的字串。
uj5u.com熱心網友回復:
連接所有不在name:變數中開頭的行,然后在到達下一name:行時將其附加到結果中。
ls2 = []
temp_string = ''
for line in lines:
line = line.rstrip('\n')
if line.startswith('name:'):
if temp_string:
ls2.append(temp_string)
temp_string = ''
ls2.append(line)
else:
temp_string = line
# append the last set of lines
if temp_string:
ls2.append(temp_string)
uj5u.com熱心網友回復:
我認為邏輯可以更好地表達為“如果當前行以 開頭name:,則將其附加到新串列中,并將接下來的三行合并為一行并附加該行。”
with open ('names.txt', 'r') as text:
lines = text.readlines()
i = 0
ls2 = []
for i, line in enumerate(lines):
if line.startswith('name:'):
ls2.append(line)
ls2.append(lines[i 1] lines[i 2] lines[i 3])
uj5u.com熱心網友回復:
也許不要拆分成所有行,而只是按名稱行拆分整個檔案,然后再潤色空白?
import re
with open('names.txt') as f:
ls = [re.sub(r'\s ', ' ', s.strip())
for s in re.split('(name:.*)', f.read())
if s]
將您的串列寫回檔案并使用我上面的代碼,我得到了所需的輸出(它們應該有空格但沒有重復的空格):
['name: John', 'John has 4 yellow cars.', 'name: Angelina', 'Angelina has 5 yellow cars.']
在線試試吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314369.html
下一篇:以十六進制格式處理時數字大小丟失
