将文件中以“\”结尾的行连接在一起

我对 python 真的很陌生,出于某种原因,这让我难住了一段时间,所以我想我会寻求帮助。


我正在开发一个 python 脚本,它可以让我读入我的文件,但是如果在行尾有一个 '\' ,它会在它之后加入该行。


所以如果这些行如下:


: Student 1 

: Student 2 \

Student 3

任何前面没有冒号的行,如果前一行有 '\' 我想将它们组合成这样:


: Student 2 Student 3

这是我尝试过的:


s = ""    

if line.endswith('\\'): 

   s.join(line) ## line being the line read from the file

任何正确方向的帮助都会很棒


猛跑小猪
浏览 210回答 3
3回答

收到一只叮咚

s.join不会做你认为它会做的事情。还要考虑文件中的行有一个换行符 ( '\n') 所以.endswith('\\')不会因为这个原因被捕获。像这样的东西(虽然方法有些不同)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在上面,我们曾经line.rstrip()读取任何尾随空格(换行符),以便该.endswith方法正确匹配。如果一行以 结尾\,我们继续使用内置函数将下一行从文件生成器中拉出next。最后,我们组合该行和下一行,注意再次删除空格 ( .rstrip()) 和\字符([:-1]表示直到最后一个字符的所有字符)并取新行并将其添加到输出中。结果字符串像这样打印出来: Student 1 : Student 2 Student 3注意s.join... 最好将其解释为 ,的反义词split,s用作分隔符(或连接)字符。>>> "foo.bar.baz".split('.')['foo', 'bar', 'baz']>>> "|".join(['foo', 'bar', 'baz'])'foo|bar|baz'

qq_遁去的一_1

如果您可以读取完整文件而不将其拆分为行,则可以使用正则表达式:import retext = """: Student 1 : Student 2 \Student 3""".strip()print(re.sub(r'\\\s*\n[^:]', ' ', text)): Student 1 : Student 2 Student 3正则表达式匹配出现的\后跟新行和不是:.

慕田峪9158850

如果以字符串列表开头,则可以使用regex和join来避免循环。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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python