readline()返回括号

时间:2016-08-03 01:09:52

标签: python readline

我写了一些代码来从.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

它返回

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

4 个答案:

答案 0 :(得分:4)

对代码进行微小更改,请尝试:

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')安全删除它。

答案 1 :(得分:3)

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

不要拆分单行。而是 strip 字符串(删除前导和尾随“white-space”)。

请阅读the string reference,了解有关splitlinesstrip的更多信息。

答案 2 :(得分:1)

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

请改为尝试:

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

答案 3 :(得分:1)

你不需要在readline()的结果上调用splitlines()方法

file.readline()返回文件的一行,包括尾部换行符。

.splitlines()通过将它用作分隔符并使用仅有1个项目的行列表来摆脱换行符。括号来自该1项列表的str表示

你想要这个:

x = f.readline().rstrip()

删除换行符,或者你也可以切片关闭换行符

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

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

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

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