为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2021-08-11 22:01:24
我对 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任何正确方向的帮助都会很棒
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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'


查看完整回答
反对 回复 2021-08-11
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

如果您可以读取完整文件而不将其拆分为行,则可以使用正则表达式:


import re


text = """

: Student 1 

: Student 2 \

Student 3

""".strip()


print(re.sub(r'\\\s*\n[^:]', ' ', text))


: Student 1 

: Student 2 Student 3

正则表达式匹配出现的\后跟新行和不是:.


查看完整回答
反对 回复 2021-08-11
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

如果以字符串列表开头,则可以使用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']


查看完整回答
反对 回复 2021-08-11
  • 3 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信