readline() returns 括号

readline() returns bracket

我写了一些代码来从 .txt 中获取一些行,如下所示,它不断返回带括号的行,这不是我想要的。你能帮帮我吗?

代码:

#!/bin/python
i=1
f=open("name.txt","r")
while(i<=225):
 x=f.readline().splitlines()
 print("mol new %s.bgf"%(x))
 i+=1
f.close()

name.txt

02.ala.r49r50.TRK820.no_0.rnd_1.c14421.f.c
04.ala.r44r45.TRK820.no_0.rnd_1.c48608.h.c
09.ala.r46r47.TRK820.no_0.rnd_1.c14682.t.c
17.ala.r47r48.TRK820.no_0.rnd_1.c9610.th.c
18.ala.r48r49.TRK820.no_59.rnd_1.c19106.t.c

它returns

mol new ['02.ala.r49r50.TRK820.no_0.rnd_1.c14421.f.c'].bgf
mol new ['04.ala.r44r45.TRK820.no_0.rnd_1.c48608.h.c'].bgf
mol new ['09.ala.r46r47.TRK820.no_0.rnd_1.c14682.t.c'].bgf
mol new ['17.ala.r47r48.TRK820.no_0.rnd_1.c9610.th.c'].bgf
mol new ['18.ala.r48r49.TRK820.no_59.rnd_1.c19106.t.c'].bgf

readline 函数从文件中读取一行。然后您要求将该行拆分为 list 行(这将为您提供只有一行的列表,因为这就是您所拥有的)。

不要拆分单行。相反 strip 字符串(删除前导和尾随 "white-space")。

请阅读the string reference for more information about both splitlines and strip

这是因为f.readline().splitlines() returns 列表形式中的行包含单个元素。

试试这个:

x = f.readline().splitlines()
x = x[0]

对您的代码进行最少的更改,尝试:

i=1
f=open("name.txt","r")
while(i<=225):
 x=f.readline().rstrip('\n')
 print("mol new %s.bgf"%(x))
 i+=1
f.close()

这会产生如下输出:

mol new 02.ala.r49r50.TRK820.no_0.rnd_1.c14421.f.c.bgf
mol new 04.ala.r44r45.TRK820.no_0.rnd_1.c48608.h.c.bgf
mol new 09.ala.r46r47.TRK820.no_0.rnd_1.c14682.t.c.bgf
mol new 17.ala.r47r48.TRK820.no_0.rnd_1.c9610.th.c.bgf
mol new 18.ala.r48r49.TRK820.no_59.rnd_1.c19106.t.c.bgf

进一步改进:

with open("name.txt","r") as f:
    for i, line in enumerate(f):
        if i >= 225:
            break
        print("mol new %s.bgf"%(line.rstrip('\n')))

备注:

  1. 您想使用 with open("name.txt","r") as f 来确保文件 f 无论如何都会关闭。

  2. i 上循环作为 i=1; while(i<=225): i+=1 中的计数器不是 pythonic。请改用枚举。

  3. readline 读一行。不需要splitlines.

  4. 通过使用 for i, line in enumerate(f): 遍历文件中的行,我们消除了一次读取整个文件的需要。这使得该程序适合处理非常大的文件。

  5. 在python中,当从文件中读取一行时,它的末尾仍然有换行符。我们使用 rstrip('\n') 来安全地删除它。

您不需要对 readline() 的结果调用 splitlines() 方法

file.readline() returns 文件的一行,包括结尾的换行符。

.splitlines() 通过将换行符用作分隔符并为您提供仅包含一项的行列表来摆脱换行符。括号来自该 1 项列表的 str 表示

你想要这个:

x = f.readline().rstrip()

删除换行符或者你也可以像这样从换行符切掉

x = f.readline()[:-1]

您可能会考虑的另一件事是更改代码以将文件对象用作可迭代对象。在 Python 中写

更为惯用
for line in fileobject:
    print line[:-1]

而不是使用 while 循环和 .readline()