readline()返回b

2024-06-02 08:10:54 发布

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

我写了一些代码从下面的.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()

在名称.txt在

^{pr2}$

它又回来了

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

Tags: no代码nametxtnewbinopen括号
3条回答

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

文件.readline()返回文件的一行,包括尾随的新行。

.splitlines()通过将换行符用作分隔符并为您提供一个只有1项的行列表,从而消除了换行符。括号来自于1项列表的str表示

你想要这个:

x = f.readline().rstrip()

要删除换行符,或者您也可以像这样将换行符切掉

^{pr2}$

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

for line in fileobject:
    print line[:-1]

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

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

不要拆分单线。取而代之的是去掉字符串的(删除前导和尾随的“空白”)。在

有关^{}和{a3}的更多信息,请阅读the string reference。在

对代码进行最小程度的更改,请尝试:

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()

这会产生如下输出:

^{pr2}$

进一步改进:

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中的计数器不是Python。请改用enumerate。

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

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

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

相关问题 更多 >