用特定字符替换行

Posted

技术标签:

【中文标题】用特定字符替换行【英文标题】:Replace lines with a specific character 【发布时间】:2022-01-05 23:30:20 【问题描述】:

输入:

ch1\tAa,Ab,Ac,;Ba,Bb,Bc,;\n
ch2\tCa,Cb,Cc,;Da,Db,Dc,;Ea,Eb,Ec,;\n

预期输出:

ch1\tAa,Ab,Ac,\n
''\tBa,Bb,Bc,\n
ch2\tCa,Cb,Cc,\n
''\tDa,Db,Dc,\n
''\tEa,Eb,Ec,\n

输出:

''\tch1\tAa,Ab,Ac,\n
Ba,Bb,Bc,\n
''\tch2\tCa,Cb,Cc,\n
Da,Db,Dc,\n
Ea,Eb,Ec,\n

代码:

with open(input, 'r') as fr, open(output, 'w') as fw:

    new_file_content = ''
    for line in fr:
        stripped_line = line.strip()
        new_line = '' + '\t' + stripped_line.replace(';', '\n')
        new_file_content += new_line + '\n'

    fw.write(new_file_content)
    我想写基于';'的其他行一行。 我想使用 '' + \t 来表示由 ';' 分隔的行。 很抱歉,您对我有什么建议吗?

【问题讨论】:

要清楚,在您的预期输出中,'' 是由两个单引号组成的文字字符串吗? 我想让你知道这种情况下的空白。如果您看不懂我的文字,那是我的错。 不,我认为这不是任何人的错。编写控制字符(例如 \n\t)或字符串分隔符总是很棘手。 【参考方案1】:

尝试以下方法:

with open('input.txt', 'r') as f, open('output.txt', 'w') as g:
    for line in f:
        g.write(line.rstrip(';\n').replace(';', '\n\t'))
        g.write('\n')

(但是请注意,从技术上讲,rstrip(';\n') 不会删除最右边的 子字符串 ';\n'。它只会删除 字符 ';''\n'从右边开始。您可能想改用removesuffix,这样更安全(python 3.9+)。)

输出(output.txt;空格是\t's)

ch1 Aa,Ab,Ac,
    Ba,Bb,Bc,
ch2 Ca,Cb,Cc,
    Da,Db,Dc,
    Ea,Eb,Ec,

编辑:以下是附加请求:

with open('input.txt', 'r') as f, open('output.txt', 'w') as g:
    for line in f:
        head, tail = line.rstrip(';\n').split('\t', maxsplit=1) # strip using \t
        cells = tail.split(';') # strip using ;
        for cell in cells:
            g.write(f"head\tcell\n")

输出:

ch1 Aa,Ab,Ac,
ch1 Ba,Bb,Bc,
ch2 Ca,Cb,Cc,
ch2 Da,Db,Dc,
ch2 Ea,Eb,Ec,

【讨论】:

@LoganLee 我的错!我已经更新了答案。 很抱歉,如果我想在行前的制表符下放置一个字符,我应该如何编写代码?例如,'ch1\tAa,Ab,Ac,\n', 'ch1\tBa,Bb,Bc,\n', 'ch2\tCa,Cb,Cc,\n', 'ch2\tDa,Db,Dc ,\n', 'ch2\tEa,Eb,Ec,\n' @LoganLee 我已经更新了答案。【参考方案2】:

我对你所说的你想要什么以及你的预期输出感到困惑,但这应该输出你的预期输出。我怀疑这是最好的方法,而且很混乱,但它应该有效。我很困惑'\n'与'\\n'的含义,但你应该能够改变它。如果这不是您想要的,对不起,请告诉我您想要什么,我会尝试修复代码。另外,我不认为这是可扩展的。在 for 循环中,我使用“-2”等,所以我认为它不适用于所有输入,但可以更改。我希望这会有所帮助:)

file:str=".\\file_1.txt"
new_file:str=".\\new_file_1.txt"

with open(file,'r') as fr,open(new_file,'w') as fw:
    new_file_content=''

    for line in fr:
        stripped_line=line.strip()
        new_line=''

        split_line:str=stripped_line.split(';')

        for a in range(len(split_line)-1):
            new_line=split_line[a]+"\\n"

            if a<len(split_line)-2:
                new_line+="\n''\\t"

            new_file_content+=new_line

        new_file_content+='\n'

    fw.write(new_file_content)

    print(open(new_file,'r').read())

【讨论】:

以上是关于用特定字符替换行的主要内容,如果未能解决你的问题,请参考以下文章

字符替换

vim 替换操作和特定行删除

怎样用js替换网页里的指定字符串?

python读取文本文件,如何将每行最后一个特定字符替换?

用多个新字符串替换文件中特定位置的单个字符串

用特定逻辑替换字符串中的字符