3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
s.join不會(huì)做你認(rèn)為它會(huì)做的事情。還要考慮文件中的行有一個(gè)換行符 ( '\n') 所以.endswith('\\')不會(huì)因?yàn)檫@個(gè)原因被捕獲。
像這樣的東西(雖然方法有些不同)
output = ''
with open('/path/to/file.txt') as f:
for line in f:
if line.rstrip().endswith('\\'):
next_line = next(f)
line = line.rstrip()[:-1] + next_line
output += line
在上面,我們?cè)?jīng)line.rstrip()讀取任何尾隨空格(換行符),以便該.endswith方法正確匹配。
如果一行以 結(jié)尾\,我們繼續(xù)使用內(nèi)置函數(shù)將下一行從文件生成器中拉出next。
最后,我們組合該行和下一行,注意再次刪除空格 ( .rstrip()) 和\字符([:-1]表示直到最后一個(gè)字符的所有字符)并取新行并將其添加到輸出中。
結(jié)果字符串像這樣打印出來(lái)
: Student 1
: Student 2 Student 3
注意s.join... 最好將其解釋為 ,的反義詞split,s用作分隔符(或連接)字符。
>>> "foo.bar.baz".split('.')
['foo', 'bar', 'baz']
>>> "|".join(['foo', 'bar', 'baz'])
'foo|bar|baz'

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您可以讀取完整文件而不將其拆分為行,則可以使用正則表達(dá)式:
import re
text = """
: Student 1
: Student 2 \
Student 3
""".strip()
print(re.sub(r'\\\s*\n[^:]', ' ', text))
: Student 1
: Student 2 Student 3
正則表達(dá)式匹配出現(xiàn)的\后跟新行和不是:.

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果以字符串列表開(kāi)頭,則可以使用regex和join來(lái)避免循環(huán)。
l = ['a\\', 'b','c']
s = '_'.join(l)
lx = re.split(r'(?<!\\)_', s) # use negative lookbehind to only split underscore with no `\` before it
[e.replace('\\_', '') for e in lx] # replace with '', ' ' if you need so.
輸出:
['ab', 'c']
添加回答
舉報(bào)