我写了一些代码来从.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
答案 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')))
注意:
您希望使用with open("name.txt","r") as f
确保文件f
无论如何都会关闭。
在i
中作为计数器循环i=1; while(i<=225): i+=1
不是pythonic。请改用枚举。
readline
读一行。不需要splitlines
。
通过使用for i, line in enumerate(f):
循环遍历文件中的行,我们无需立即读取整个文件。这使程序适合处理非常大的文件。
在python中,当从文件中读取一行时,它仍然在其末尾有换行符。我们使用rstrip('\n')
安全删除它。
答案 1 :(得分:3)
readline
函数从文件中读取一行。然后,您要求将该行拆分为 列表 行(这将为您提供仅有一行的列表,因为这就是您拥有的行)。
不要拆分单行。而是 strip 字符串(删除前导和尾随“white-space”)。
请阅读the string reference,了解有关splitlines
和strip
的更多信息。
答案 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()