python在文件中读取行并加入它们

时间:2014-10-31 17:10:45

标签: python join readline

我有这段代码

with open ('ip.txt') as ip :
    ips = ip.readlines()
with open ('user.txt') as user :
    usrs = user.readlines()
with open ('pass.txt') as passwd :
    passwds = passwd.readlines()
with open ('prefix.txt') as pfx :
    pfxes = pfx.readlines()
with open ('time.txt') as timer :
    timeout = timer.readline()
with open ('phone.txt') as num :
    number = num.readline()

打开所有这些文件并将其加入此形状

result = ('Server:{0} # U:{1} # P:{2} # Pre:{3} # Tel:{4}\n{5}\n'.format(b,c,d,a,number,ctime))
print (result)
cmd = ("{0}{1}@{2}".format(a,number,b))
print (cmd)

我猜它会像这样打印

Server:x.x.x.x # U:882 # P:882 # Pre:900 # Tel:456123456789
900456123456789@x.x.x.x

但输出就像这样

Server:x.x.x.x
 # U:882 # P:882 # Pre:900
 # Tel:456123456789
900
456123456789@187.191.45.228

新输出: -

Server:x.x.x.x # U:882 # P:882 # Pre:900 # Tel:['456123456789']
900['456123456789']@x.x.x.x

我怎么能解决这个问题?

3 个答案:

答案 0 :(得分:1)

您可能应该使用newline删除strip()
实施例

with open ('ip.txt') as ip :
    ips = ip.readline().strip()

readline()将一次读取一行,其中readlines()将整个文件作为行列表读取

答案 1 :(得分:0)

我猜你的有限例子是b嵌入了换行符。这是因为readlines()。这里使用的python习语是:ip.read().splitlines()其中ip是你的文件句柄之一。

python docs

查看更多分割线选项

答案 2 :(得分:0)

除了其他很好的答案之外,为了完整起见,我将使用string.translate发布一个替代答案,如果有任何\n或换行符被意外插入到您的中间字符串,如'123\n456\n78',它将涵盖使用rstripstrip的角落案例。

  

服务器:x.x.x.x#U:882#P:882#上一个:900#电话:['456123456789']

     

900 [ '456123456789'] @ X.X.X.X

您知道这是因为您要打印一个列表,要解决此问题,您需要加入列表中的字符串number

总而言之,解决方案将是这样的:

import string

# prepare for string translation to get rid of new lines
tbl = string.maketrans("","")

result = ('Server:{0} # U:{1} # P:{2} # Pre:{3} # Tel:{4}\n{5}\n'.format(b,c,d,a,''.join(number),ctime))
# this will translate all new lines to ""
print (result.translate(tbl, "\n"))
cmd = ("{0}{1}@{2}".format(a,''.join(number),b))
print (cmd.translate(tbl, "\n"))