用特定字符替换行
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())
【讨论】:
以上是关于用特定字符替换行的主要内容,如果未能解决你的问题,请参考以下文章