用if语句查找并替换一行中的字符串

2024-04-26 00:09:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一个特定的文本文件。我试图打开文本文件,逐行询问是否存在特定的字符串(在下面的示例中,它是在大括号中出现数字01),然后向前向后操作特定字符串,或者保持不变。这是一个例子,其中一行被任意命名为“go”。。。(完整文件中的其他行格式类似,但有{01}, {00}等。。。在

go = 'USC_45774-1111-0     <hkxhk> {10} ; 78'

go = go.replace(go[22:24],go[23:21:-1])

>>> go
'USC_45774-1111-0     <khxkh> {10} ; 78'

我试图操作第一个"hk" (go[22:24]),方法是用相同的字母替换它,但是向后(go[23:21:-1),我想看到的是khxhk,但是正如你所看到的,我得到的结果是,这两个字母都向后转为khxkh。在

我也有一个问题,即对每一行执行特定的if语句。许多没有{01}的行被操作得好像它们是。。。。在

^{pr2}$

我错过了一些简单的事情吗?在


Tags: 文件字符串go示例格式字母数字大括号
3条回答

可以使用replace()的count参数:

'USC_45774-1111-0     <hkxhk> {10} ; 78'.replace("hk","kh",1)

对于第二个问题,您需要将条件更改为:

^{pr2}$

stringreplace方法不按位置替换字符,而是用字符替换它们。在

>>> 'apple aardvark'.replace('a', '!')
'!pple !!rdv!rk'

所以在你的第一个例子中,你要用“kh”代替“hk”。它不“知道”你只想替换其中的一个,它只知道你想用“kh”替换“hk”,所以它会替换所有的出现。在

您可以使用count参数来替换,以指定您只想替换第一个匹配项:

^{pr2}$

但是请注意,这将始终替换第一个出现,而不一定是字符串中指定位置的出现。在这种情况下,我想这正是您想要的,但它可能无法直接用于其他类似的任务。(也就是说,无法按原样使用此方法来替换第二次或第三次出现;只能替换第一次、前两次或前三次,等等。要替换第二次或第三次出现,您需要做更多的工作。)

至于你问题的第二部分,你误解了if "{01}" or "{-1}" in line的意思。通俗地说,这意味着if "{01}" or if "{-1}" in line。{e>{e>始终是true,因为条件“^.01”不是真的。你想要的是if "{01}" in line or "{-1}" in line"。在

我不知道Python是怎么回事,但你的问题是每天至少在这里发布几次。在

if "{01}" or "{-1}" in line:

这不像你想的那样。它会问:“这是真的吗?”?因为它是一个非零长度的字符串。因为or短路,所以不测试其余条件,因为第一个参数为真。因此,始终执行if语句的主体。在

换句话说,Python的计算结果就像您编写了以下代码:

^{pr2}$

你想要这样的东西:

if "{01}" in line or "{-1}" in line:

或者如果你有很多类似的情况:

if any(x in line for x in ("{01}", "{-1}")):

相关问题 更多 >